首页 > 解决方案 > 如何为每个主机组合多个 vars 文件?

问题描述

我有一本针对多台服务器运行的剧本。所有服务器都需要sudo指定密码,该密码特定于每个运行 playbook 的用户。运行剧本时,我不能使用--ask-become-pass,因为服务器上的 sudo 密码不同。这与关于多个 sudo 密码的另一个问题中的情况相同。

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对于每个运行 playbook 的用户来说,我希望有一个单独的文件(理想情况下是 Vaulted),它指定每个主机的密码。

我想象以下内容:

# 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 中可行吗?如果是这样,怎么做?

标签: ansible

解决方案


您应该能够将include_vars任务与inventory_hostnameansible_hostname变量一起使用。例如:

- name: Include host specific variables
  include_vars: "{{ ansible_hostname }}.yml"

- name: Include host specific secret variables
  include_vars: "{{ ansible_hostname }}_secret.yml"

更好的解决方案是解决用户在不同主机上拥有唯一密码的问题。


推荐阅读