不同环境下的独立Ansible Vault?

不同环境下的独立Ansible Vault?,ansible,ansible-playbook,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: {{

我使用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 }}
 —> db_user: myuser_ro
 —> db_passwordd: some_password
由于我的非prod环境共享一个端点,因此这些变量的值设置在角色的默认文件中:

/roles/myapp/defaults/main.yml

 —> set value in app config file to: {{ db_user }}
 —> set value in app config file to: {{ db_password }}
 —> db_user: myuser_ro
 —> db_passwordd: some_password
对于prod环境,我将使用group_变量覆盖默认值(因为它优先):

/environments/prod/group\u vars/myapp\u servers

 —> db_user: produser_ro
 —> db_password: some_other_password
这一切都非常有效,允许我们在所有环境中使用单个剧本/角色。但是,我希望移动利用ansible vault将密码值从这些文件中移动到加密文件中

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

但这并不能解释我是如何解释不同环境需要不同(加密)变量的


有什么建议吗?

当前ansible vault不支持单个ansible配置中的多个vault密码。您必须使用相同的vault密码来加密prod和非prod环境文件。

听起来您使用的是类似于的多环境结构。在这种情况下,可以为每个环境创建vault文件

environments
├── dev
│   └── group_vars
│       └── all
│           └── secrets
└── prod
    └── group_vars
        └── all
            └── secrets

每个“机密”文件都可以有自己的密码。

从前面的回答开始,时间已经过去,Ansible 2.2限制您在整个playbook执行过程中使用一个vault密码,但这并不妨碍您使用不同的vault密码加密不同的文件,只要它们不同时使用

简而言之,您可能拥有一个测试环境,其vault密码与生产环境不同

我做了一个PoC,你可以在这里检查:


我认为最好的解决方案可能是在调用ansible playbook时使用多个vault并使用--vault密码文件引用它们:(即:myapp_prod_vault.yml、myapp_nonprod_vault.yml)等等,为什么不能使用组变量并为每个组分别使用vault文件?你的问题相当令人困惑,很难理解你到底想解释什么。多亏了谁投了我的-1,这是不值得的:)