我正在为 Cumulus-Linux(白盒)网络开发 Ansible 自动化。我正在使用 Ansible Vault 加密我想要在新 Cumulus 交换机上构建的本地帐户的密码。但是,当我运行剧本时,似乎 ansible 能够从我的保险库加密文件中读取用户名变量,但不能读取我定义的密码变量。无法检查 Ansible 将这些密码设置为什么;当然,即使在 -vvvv Ansible 输出中,密码也是加密的。
根据我看到的每个 Ansible Vault 示例,我的变量都是这样定义的(引用加密变量的未加密变量):
- “user”从“vault_user”获取其值,该值位于我的 vault-encrypted 变量文件中。
- “password”从“vault_password”中获取其值,该值也位于我的保管库加密文件中。
我目前的剧本结构:
root
--> ansible.cfg
--> hosts
--> main.yml (main playbook)
--> group_vars
--> all
--> main.yml (where unencrypted "user" and "password" declared)
--> vault.yml (encrypted, has values for "vault_user" and "vault_password")
我的剧本中创建/修改帐户的实际部分:
- name: create_admin_account
user:
name={{ user }}
shell=/bin/bash
password={{ password }}
groups=sudo
append=yes
/group_vars/all/main.yml 中的变量定义
user: "{{ vault_user }}"
password: "{{ vault_password }}"
然后,在保管库加密文件中,/group_vars/all/vault.yml(不共享实际帐户信息):
vault_user: 'xxxx'
vault_password: 'yyyy'
加密密码存储在一个单独的文件中,我通过 jenkins 自动化/Github 将 Ansible 指向该文件(而不是在 ansible.cfg 中定义保险库密码文件)。
问题:
当我运行这个剧本时,它成功完成,它实际上读取了我的保管库文件并创建了“xxxx”用户帐户。但是,它似乎没有将帐户密码设置为我定义的值,因为之后我无法使用这些凭据登录。我验证了该帐户已正确创建,并且随后出现在 sudoers 组中。
如果 ansible 可以读取存储的“用户”变量,为什么它不能读取相同的“密码”变量?
我什至尝试使用未加密的纯文本文件运行它——ansible STILL 无法正确读取我的“密码”变量。
有没有人知道一种黑客或方法来查看 Ansible 在运行时将什么纯文本值插入到这个变量中(可能是一个愚蠢的问题,因为这将是一个巨大的安全风险!)?