Ansible在其他变量中使用加密变量

时间:2014-07-09 11:07:08

标签: mysql encryption ansible ansible-playbook

我正在构建几个可以执行各种维护任务的剧本。为此,他们需要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

这有效,但我想将'秘密'变量移到另一个文件中,以便我可以:

  • 根据特定的剧本或情况添加不同的用户组
  • 使文件加密以与Ansible Vault一起使用

如何将dbhosts结构保留在main.yml文件中以供参考,并将“secret”变量移动到另一个文件?

我所能找到的是有关如何在运行时在任务中添加变量的文件的信息,但是在加载变量'dbhosts'之前不应该加载它,因此dbhosts中变量的扩展将转到工作?

1 个答案:

答案 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文件   因为他们需要。