我有一个与其他团队分享的部署项目。我用金库加密了我的秘密。 我想用密码和带有其他密码的登台文件加密生产文件,以避免其他团队访问生产机密。
有可能吗?
我做过类似的事情。我的秘密:
cat /group_vars/all/vault_production.yml (encrypt with password A)
production_password: 'test1'
cat/group_vars/all/vault_staging.yml (encrypt with password B)
staging_password: 'test2'
我的环境:
cat hosts-production
[all:vars]
env_type=production
cat hosts-staging
[all:vars]
env_type=staging
我的剧本:
- copy:
content: |
env PASS={{hostvars[inventory_hostname][env_type + '_password']}}
...
我就这样推出了剧本。
# for production
ansible-playbook -i hosts-staging test.yml --vault-password-file .password_a
# for staging
ansible-playbook -i hosts-staging test.yml --vault-password-file .password_b
但这不起作用,因为有两个不同的密码(错误!解密失败)。 你知道怎么做吗 ?
感谢。
BR,
埃里克
答案 0 :(得分:3)
抱歉,今天每次运行只允许一个保管库密码。在你真正只需要一个或另一个的情况下解决这个问题的最佳方法是基于var动态加载一个拱形文件;例如:
- hosts: localhost
vars_files:
- secretstuff-{{ env_type }}.yml
tasks:
...
或
- hosts: localhost
tasks:
- include_vars: secretstuff-{{ env_type }}.yml
...
取决于你是否需要vars在一场比赛或整场比赛中存活(后者将把它们作为事实而非比赛场地)。
答案 1 :(得分:0)
ansible-playbook --vault-id dev@dev-password --vault-id prod@prompt site.yml
如果提供了多个保管库密码,则默认情况下,Ansible会通过按命令行中提供的顺序尝试每个保管库密钥,从而尝试解密保管库内容。
在上述情况下,将首先尝试使用“开发”密码,然后在Ansible不知道使用哪个库ID进行加密的情况下尝试使用“产品”密码。