问题描述
为了连接到 Windows 主机,我需要在清单文件中传递凭据。这是我的库存文件:
[windows]
100.100.100.100
[windows:vars]
ansible_user=Adminuser
ansible_password="Mypassword"
ansible_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
Ansible 文档说凭据应该使用 ansible-vault 进行加密。我可以在我的清单文件中使用使用 ansible-vault 加密的变量文件吗?如果是这样,我如何将我的 ansible-vault 凭据传递给我的清单文件?我还将在我的剧本中使用凭据,如下所示:
- hosts: windows
gather_facts: no
vars_files:
- vars.yml
tasks:
- win_domain_membership:
dns_domain_name: my.domain.com
hostname: ansible-host
domain_admin_user: {{ admin_user }}
domain_admin_password: {{ passwd }}
domain_ou_path: "OU=Windows,OU=Servers,DC=ansible,DC=com"
state: domain
register: domain_state
然后我将使用 ansible-vault 为这个剧本加密我的变量文件。
---
admin_user:[email protected]
passwd:mypassword
然后在命令行将我的 ansible-vault 凭据传递给我的剧本:
$ ansible-playbook myplaybook.yml --ask-vault-pass
是否可以将库存中使用的变量文件和剧本中使用的变量文件存储在同一个 ansible-vault 中?这样我就可以在命令行传递两个文件的 ansible-vault 凭据?
解决方法
ansible-vault
命令加密单个文件。 Ansible 在运行时对其进行解密并以与文件未加密时相同的方式对其进行解释(因此您不能“将我的清单中使用的变量文件和我的剧本中使用的变量文件存储在同一个 ansible-vault 中”因为这是两个不同的文件)。
我只想从你的库存中删除变量,让它像这样:
[windows]
100.100.100.100
然后将 group_vars/windows.yml
创建为具有以下内容 (ansible-vault create groups_vars/windows.yml
) 的保管库文件:
ansible_user: Adminuser
ansible_password: "Mypassword"
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
当您有针对 group_vars/windows.yml
组的播放时,Ansible 将自动应用 windows
中的变量。