我有一本针对多台服务器运行的剧本。所有服务器都需要指定sudo
密码,该密码特定于运行该剧本的每个用户。运行剧本时,我不能使用--ask-become-pass
,因为服务器上的sudo密码不同。这与another question about multiple sudo passwords中的情况相同。
一种可行的解决方案是在ansible_become_pass
中指定host_vars
:
# host_vars/prod01.yml
ansible_become_pass: secret_prod01_password
domain: prod01.example.com
# host_vars/prod02.yml
ansible_become_pass: secret_prod02_password
domain: prod02.example.com
除了ansible_become_pass
之外,每个主机还定义了其他变量。这些变量应提交给git仓库。但是,由于ansible_become_pass
特定于运行该剧本的每个用户,因此我希望有一个单独的文件(最好是保险库文件),该文件指定每个主机的密码。
我想象以下情况:
# host_vars/prod01.yml: shared in git
domain: prod01.example.com
# host_vars/prod01_secret.yml: in .gitignore
ansible_become_pass: secret_prod01_password
我想象运行剧本时Ansible将两个文件合并。这在Ansible中可能吗?如果可以,怎么办?
答案 0 :(得分:0)
您应该能够将 include_vars 任务与 inventory_hostname 或 ansible_hostname 变量一起使用。例如:
\actuator\refresh
一个更好的解决方案是解决用户在不同主机上具有唯一密码的问题。
答案 1 :(得分:0)
您可以在清单文件中创建一个新组,也许是sudo-hosts。将所有sudo主机放入该组。然后在目录group_vars下创建一个具有该组名称的文件。在该文件中放入秘密的Yaml结构文本。
sudo_hosts:
host1:
password: xyz
othersecret_stuff: abc
host2:
...
然后使用ansbile-vault
用一个密码对该文件加密。使用选项--ask-vault-pass
调用该剧本
您可以通过
"{{ sudo_host['ansible_host'].password }}"