【发布时间】:2021-06-16 04:00:43
【问题描述】:
对冗长的帖子表示歉意。我是 Ansible 和 Vault 的新手(
环境:
- CentOS & Win2019(90% Linux 系统)
- Ansible 2.10.7(主 Ansible 控制器)
- AWX 17.0.1(嵌入式 ansible 2.9.17)
终极目标:
- 在两种环境(生产和测试)中使用来自 Git 的相同代码
- 能够根据环境分离“秘密”值
基本设置(当前):
- Ansible 主控制器设计为完全自启动。这意味着所有设置/配置都包含在剧本中。这意味着我可以在 3 分钟内炸毁 ANS 控制器并重建。
- 所有机密都是变量文件中的加密字符串。由于 AWX 无法导入受保管的文件,所有机密都是内联的 (ansible-vault encrypt_string 'secret_data' --name 'my_secret')
- 两个环境中存在相同的用户帐户,但凭据不同
当前问题:
- 如果要将 Git 存储库导入我的 Prod Ansible 主控制器,任何需要秘密的播放都会失败(因为它具有带有“测试”值的秘密变量)
需要解决的问题:
- 我考虑过使用 ansible 的“默认”函数来结合基于 Inventory 文件的“何时”条件的任何秘密。基本上,如果库存文件是基于“测试”的系统,请使用“测试”机密。如果没有,请使用“Prod”秘密。
从我的角度来看,这是一个丑陋的解决方案,必须是一个更好的解决方案。
- 使用 Hashicorp 保险库。它能够使用命名空间树对凭据进行分类。我还没有尝试过这个想法,不确定它是否可行。
我想知道业内其他人正在为同样的问题做些什么。这不是唯一的问题,并且肯定有针对这种情况的最佳做法。
谢谢
【问题讨论】:
-
IIUC 您想要不同的变量,因为在您的环境中(保险库机密只是另一个变量)?如果是这样,请参阅 docs.ansible.com/ansible/2.8/user_guide/… 如果是这样,一个示例:
inventories/prod/group_vars/all.yml将具有 prod vault secrets... 使用ansible -i inventories/prod ...。 -
我遵循了 Ansible 文档Ansible Direcotry 中提供的目录布局,我遵循了第一个示例,发现它很容易导入到 AWX。我将这些目录布局视为非此即彼的场景。但可能我可以将“group_var”文件夹从根级别移动到“inventory”文件夹下。 - 你知道 AWX 是否会尊重这种布局?我也必须进行测试,但要过几天才能测试 - 这是例外的目录布局吗?我想尽可能保持“最佳实践”。
-
第二种布局更好,因为您可以将变量放入与环境相关的目录中,例如。
~/src/work/infra-ansible/env/prod/group_vars/all/010_cross_env_vars.yml是指向/sync/src/work/infra-ansible/env/010_cross_env_vars.yml的符号链接,在 env 之间共享。 IMO AWX 的工作方式与原生 ansible 相同,具有库存路径的递归。 -
@JiriB 我想给你正确的答案,但我不能反对“评论”。您能否将您的答案发布为对主要帖子的回复。如果我自己能做到这一点,我还没有想出来。
标签: ansible hashicorp-vault ansible-vault