ansible - 如何为每个主机组合多个 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 中可行吗?如果是这样,怎么做?
解决方案
您应该能够将include_vars任务与inventory_hostname或ansible_hostname变量一起使用。例如:
- name: Include host specific variables
include_vars: "{{ ansible_hostname }}.yml"
- name: Include host specific secret variables
include_vars: "{{ ansible_hostname }}_secret.yml"
更好的解决方案是解决用户在不同主机上拥有唯一密码的问题。
推荐阅读
- java - 转换音频文件以创建图像,并将音频文件转换为图片类可用的格式
- javascript - 如何用jquery计算表中的一些数字?
- clojure - Clojure 函数与方法的设计理念
- python - Plotly Violin Plot Add Trace 无法添加名称
- android - 如何在android中的editText中限制小数点后的值?
- passport.js - 在护照天蓝色广告中使用承载策略将当前用户附加到请求
- github - 如何在 GitHub 工作流 yml 文件中拥有特定于工作流的环境
- javascript - RegEx 替代lookbehind
- angular - 在 Angular 中使用 HTTP 请求测试私有方法
- .htaccess - Opencart Redirect 301 最后带有“/”