针对不同环境分开Ansible Vault?

mcd*_*stl 7 ansible ansible-playbook

我正在使用Ansible来处理不同环境的端点差异.这是通过使用变量和ansible-xml扩展来完成的.

例如,我在名为"myapp"的角色中设置了一个名为"endpoints.yml"的任务.此任务在配置文件中设置各种配置参数,替换为变量.

/roles/myapp/tasks/endpoints.yml

 —> set value in app config file to: {{ db_user }}
 —> set value in app config file to: {{ db_password }}
Run Code Online (Sandbox Code Playgroud)

由于我的非prod环境共享一个端点,因此这些变量的值在角色的默认文件中设置:

/roles/myapp/defaults/main.yml

 —> db_user: myuser_ro
 —> db_passwordd: some_password
Run Code Online (Sandbox Code Playgroud)

对于prod环境,我用group_variable覆盖默认值(因为这优先):

/环境/ PROD/group_vars/myapp_servers

 —> db_user: produser_ro
 —> db_password: some_other_password
Run Code Online (Sandbox Code Playgroud)

这一切都很有效,并允许我们在所有环境中使用单个剧本/角色.但是,我想利用ansible-vault将密码值从这些文件中移出并加载到加密文件中.

但是,prod和non-prod仍然会有不同的值.我可以在名为"pass.yml"的角色中创建一个新的"vars"文件,使用ansible-vault对其进行加密,然后使用"include_vars:pass.yml"从任务中引用它.

但这并没有解释我如何考虑为不同的环境需要不同的(加密)变量.

有什么建议?

aug*_*rar 6

这听起来像您使用的是多环境的结构像这样.在这种情况下,您可以为每个环境创建一个Vault文件.

environments
??? dev
?   ??? group_vars
?       ??? all
?           ??? secrets
??? prod
    ??? group_vars
        ??? all
            ??? secrets
Run Code Online (Sandbox Code Playgroud)

每个"秘密"文件都可以拥有自己的密码.


Ben*_*ley 4

ansibleVault 目前不支持单个 ansible 配置中的多个保管库密码。您必须使用相同的保管库密码来加密产品和非产品环境文件。