Ansible 如何忽略解密Vault文件的失败?
我有两个角色,其中一个有一个Ansible 如何忽略解密Vault文件的失败?,ansible,ansible-playbook,ansible-vault,Ansible,Ansible Playbook,Ansible Vault,我有两个角色,其中一个有一个group\u vars文件是保险存储的,另一个不是。我希望运行不需要任何vault信息的角色,但ansible仍会提示我输入vault密码: $ tree ├── deploy-home-secure.yml ├── deploy-home.yml ├── group_vars │ ├── home │ │ └── unvaulted │ └── home-secure │ ├── unvaulted │ └── vaulte
group\u vars
文件是保险存储的,另一个不是。我希望运行不需要任何vault信息的角色,但ansible仍会提示我输入vault密码:
$ tree
├── deploy-home-secure.yml
├── deploy-home.yml
├── group_vars
│ ├── home
│ │ └── unvaulted
│ └── home-secure
│ ├── unvaulted
│ └── vaulted
├── hosts
└── roles
├── home
│ └── tasks
│ └── main.yaml
└── home-secure
└── tasks
└── main.yaml
$ ansible-playbook --version
ansible-playbook 1.8.2
configured module search path = None
$ ansible-playbook -i hosts deploy-home.yml
ERROR: A vault password must be specified to decrypt vaulttest/group_vars/home-secure/vaulted
$ ansible-playbook --vault-password-file=/dev/null -i hosts deploy-home.yml
ERROR: Decryption failed
我有类似的方法来解决这类问题(我的不是不同的角色,而是不同的主持人,但我认为同样的原则适用): 这是简化的文件结构:
group_vars
development_vars
staging_vars
vaulted_vars
production_vars
这允许您部署开发或登台,而无需Ansible要求您解密生产变量
然后,制作剧本是这样的:
hosts: production
roles:
- role...
vars_files:
- vaulted_vars/production_vars
group_vars
├── all
├── prod
├── dev
│ └── vars.yml
└── dev-vault
└── vault.yml
指定Vault var路径的vars\u文件行是键。Ansible将尝试为其在资源清册中遇到的任何组加载组vars文件。如果您将清单文件(主机)拆分为一个用于home组,另一个用于home secure,则它不会尝试解密不应该解密的VAR
$ ansible-playbook -i hosts-home deploy-home.yml
$ ansible-playbook --ask-vault-password -i hosts-home-secure deploy-home-secure.yml
如果您并不总是需要Vault中的变量,那么这里还有另一个选项 您可以有如下文件夹结构:
hosts: production
roles:
- role...
vars_files:
- vaulted_vars/production_vars
group_vars
├── all
├── prod
├── dev
│ └── vars.yml
└── dev-vault
└── vault.yml
将vault中的变量存储在该资源清册的'-vault'变体中
那么您的库存可能如下所示:
开发人员:
开发保险库:
[servers]
dev.bla.bla
[dev:children]
servers
[dev-vault:children]
servers
因此,您只需将敏感数据保存在dev vault vars中,如果在大多数情况下您实际上不需要密码等,那么您可以运行playbook,而不需要实际使用的额外选项,或者为了方便起见以明文形式存储vault密码等
因此,“正常”命令可能是:
ansible-playbook -i dev some.yml
“Vault”命令可以是:
ansible-playbook -i dev-vault some.yml --extra-vars="use_vault=true"
或者您可以通过标记来管理“包含vault变量”,包括some-vault.yml中的some.yml等我怀疑Ansible需要阅读
组变量中的所有内容
,以确保它不会遗漏任何内容。如果是这样的话,为什么不将加密的剧本移动到一个单独的“安全”目录中?@Mxx“以确保它不会遗漏任何内容”-我希望正常的未定义变量警告会生效-如果我们无法解密,那么这些变量将不可用。@Mxx“移动加密的剧本”-我不太明白。被保险存储的是组变量
文件,据我所知,这些文件必须位于与主机
文件相关的结构中。我不想用不同的密码为每个Vault文件复制我的主机文件。您的清单文件不会以任何方式链接到您的剧本(剧本中引用的主机除外)。因此,您可以为您的库存设置一个中心位置,并为每个剧本设置单独的位置。@Mxx我一定对这里的某些内容有很大的误解。文件group\u vars/home\u secure/vaulted
是已保险存储的文件。我明白。我希望运行home\u secure
角色需要密码,但home
角色不需要密码。我不知道移动我的playbook(deploy home.yml
)会如何使Ansible无法加载Vault中的组变量
文件。