我正在构建几个可以执行各种维护任务的剧本。为此,他们需要MySQL登录帐户。有几个数据库服务器,所以我创建了一个包含所有信息的变量。举例说明:
./vars/main.yml
# 'secret' variables
host1url: some_url
host1user: user
host1pass: pass
host2url: some_url
host2user: user
host2pass: pass
# array of db hosting info
dbhosts:
- name: host1
host: {{ host1url }}
user: {{ host1user }}
pass: {{ host1pass }}
- name: host2
host: {{ host2url }}
user: {{ host2user }}
pass: {{ host2pass }}
./roles/the_role/tasks/main.yml
- name: create script to perform task
template:
src=do_something.sh
dest=do_something_{{ item.name }}.sh
with_items:
dbhosts
- name: perform task
command: do_something_{{ item.name }}.sh
with_items:
dbhosts
这有效,但我想将'秘密'变量移到另一个文件中,以便我可以:
如何将dbhosts结构保留在main.yml文件中以供参考,并将“secret”变量移动到另一个文件?
我所能找到的是有关如何在运行时在任务中添加变量的文件的信息,但是在加载变量'dbhosts'之前不应该加载它,因此dbhosts中变量的扩展将转到工作?
答案 0 :(得分:2)
来自此处的博文:http://www.reinteractive.net/posts/167-ansible-real-life-good-practices
我相信这就是你要找的东西:
我们对Ansible的看法是可读性,加密有一个 做事的方式,好,不太可读...
ansible-vault
命令会 加密或解密整个var文件,你不能只加密 变量的值。解决方案很简单:创建第二个 var文件,仅用于敏感数据。但这引发了另一个问题: 您的变量现在分布在多个文件中,其中一些文件 加密。这可能会变得混乱。例如,如果你定义一个 变量字典,只有其中一个是敏感的,你必须这样做 加密整个字典。叶子加密是一个功能请求,但在此期间,那里 是一种保持可读性和安全性的优雅方式:嵌套 变量
对于每个敏感变量,您创建一个带前缀的前缀 在加密文件中。
# var_file
db_password: {{ vaulted_db_passord }}
# and for a dctionnary
aws:
- "access_key_id='abcdefgh'"
- "secret_access_key='{{ vaulted_aws_secret_access_key }}'"
# vault_file
vaulted_db_passord: a_super_secret
vaulted_aws_secret_access_key: the_aws_secret
这样,你可以像以前一样操纵你所有的变种,知道了 拱形版本保持加密状态。你甚至可以解决问题 有人负责加密文件和其余的 团队永远不会看到其内容,但仍然能够管理var文件 因为他们需要。