16

我有两个角色,一个有一个已保存的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
4

3 回答 3

11

我有这样的东西来解决这种问题(我的不是不同的角色,而是不同的主机,但我认为同样的原则适用):

这是简化的文件结构:

group_vars
  development_vars
  staging_vars 
vaulted_vars
  production_vars

这允许您在 Ansible 不要求您解密 production_vars 的情况下部署开发或登台。

然后,生产剧本是这样的:

hosts: production
roles:
  - role...
vars_files:
  - vaulted_vars/production_vars

指定存储变量路径的 vars_files 行是关键。

于 2015-01-08T15:25:41.557 回答
7

Ansible 将尝试为它在您的清单中遇到的任何组加载一个 group_vars 文件。如果您将清单文件(主机)拆分为一个用于家庭组,另一个用于家庭安全,那么它不会尝试解密它不应该解密的变量。

$ ansible-playbook -i hosts-home deploy-home.yml

$ ansible-playbook --ask-vault-password -i hosts-home-secure deploy-home-secure.yml
于 2015-11-17T07:17:37.883 回答
4

如果您并不总是需要拱形变量,这是另一种选择。

你可以有这样的文件夹结构:

group_vars
├── all
├── prod
├── dev
│   └── vars.yml
└── dev-vault
    └── vault.yml

您将存储变量存储在该清单的“-vault”变体中。

那么您的库存可能类似于以下内容:

开发:

[servers]
dev.bla.bla


[dev:children]
servers

开发库:

[servers]
dev.bla.bla


[dev:children]
servers

[dev-vault:children]
servers

因此,您只是将敏感数据保存在 dev-vault vars 中,如果在大多数情况下您实际上不需要密码等,您可以运行 playbook 而无需您没有真正使用的额外选项,或者以明文形式存储 vault 密码方便等

所以“正常”命令可能是:

 ansible-playbook -i dev some.yml

“拱形”命令可能是:

 ansible-playbook -i dev-vault some.yml --extra-vars="use_vault=true"

或者您可以通过标记管理“包含保险库变量”,包括 some-vault.yml 中的 some.yml 等

于 2017-02-15T18:54:58.693 回答