我有两个角色,其中一个有group_vars
文件是拱形的,另一个不是。我想运行不需要任何存储信息的角色,但是ansible提示我输入保险库密码:
$ 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
答案 0 :(得分:10)
我有类似的东西来解决这类问题(我的角色不同,但主机不同,但我认为同样的原则适用):
这是简化的文件结构:
group_vars
development_vars
staging_vars
vaulted_vars
production_vars
这允许您在没有Ansible请求解密production_vars的情况下部署开发或暂存。
然后,制作剧本就是这样:
hosts: production
roles:
- role...
vars_files:
- vaulted_vars/production_vars
指定拱形var路径的vars_files行是键。
答案 1 :(得分:5)
Ansible将尝试为您在广告资源中遇到的任何群组加载group_vars文件。如果您将库存文件(主机)拆分为一个用于家庭组,另一个用于家庭安全,那么它将不会尝试解密它不应该的变量。
$ ansible-playbook -i hosts-home deploy-home.yml
$ ansible-playbook --ask-vault-password -i hosts-home-secure deploy-home-secure.yml
答案 2 :(得分:2)
如果您不总是需要您的拱形变量,这是另一种选择。
您可以拥有如下文件夹结构:
group_vars
├── all
├── prod
├── dev
│ └── vars.yml
└── dev-vault
└── vault.yml
您将拱形变量存储在' -vault'该库存的变体。
那么您的库存可能如下所示:
dev的:
[servers]
dev.bla.bla
[dev:children]
servers
DEV-保管库:
[servers]
dev.bla.bla
[dev:children]
servers
[dev-vault:children]
servers
因此,您只在dev-vault vars中保存敏感数据,如果在大多数情况下您实际上并不需要密码等,则可以在没有额外选项的情况下运行Playbooks而您并未真正使用,或者为了方便起见,将文件库密码以明文形式存储,等等。
所以"正常"命令可能是:
ansible-playbook -i dev some.yml
" vaulted"命令可能是:
ansible-playbook -i dev-vault some.yml --extra-vars="use_vault=true"
或者您可以管理"包含保险库变量"通过标记,包括some-vault.yml等中的some.yml