如何忽略解密存储文件的失败?

时间:2014-12-19 15:52:51

标签: ansible ansible-playbook ansible-vault

我有两个角色,其中一个有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

3 个答案:

答案 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