Ansible 从其他组变量中询问 ansible vault 的密码

Ansible ask for password to ansible vault from other group vars

我对 ansible 有疑问。 我有几个 group_vars 文件夹,在这个文件夹中有由 ansible-vault 加密的文件,prod 和 test 之间的密码不同:

├── group_vars
│   ├── app1_prod
│   │   ├── application.yml <- Ancryptes by Ansible Vault prod pass
│   │   └── service.yml
│   ├── app1_test
│   │   ├── application.yml <- Ancryptes by Ansible Vault test pass
│   │   └── service.yml
│   ├── app2_prod
│   │   ├── application.yml <- Ancryptes by Ansible Vault prod pass
│   │   └── service.yml
│   └── app2_test
│       ├── application.yml <- Ancryptes by Ansible Vault test pass
│       └── service.yml

我的库存文件如下所示:

[test_hosts]
test_host1
test_host2

[prod_hosts]
prod_host1
prod_host2

[app1_test:children]
test_hosts

[app2_test:children]
test_hosts

[app1_prod:children]
prod_hosts

[app2_prod:children]
prod_hosts

当我 运行 剧本命令时:

ansible-playbook app1_playbook.yml -i ./inventory/hosts -l app1_test -u ssh_user -k --vault-password-file path_to_vault_key 

我收到错误消息,指出文件的保管库密码错误并指向产品和其他组中的文件:

Decryption failed on ansible/group_vars/app1_prod/application.yml

我不知道如何解决这个问题。

就个人而言,我认为您的库存结构是个坏主意。我不容忍将 PROD 和 TEST 服务器放在同一个清单中,而且我认为这样做没有充分的理由。

我会像这样重构你的系统:

├── prod
│   ├── ansible.cfg
│   ├── group_vars
│   │   ├── app1
│   │   │   ├── application.yml <- Ancryptes by Ansible Vault prod pass
│   │   │   └── service.yml
│   │   ├── app2
│   │   │   ├── application.yml <- Ancryptes by Ansible Vault prod pass
│   │   │   └── service.yml
├── test
│   ├── ansible.cfg
│   ├── group_vars
│   │   ├── app1
│   │   │   ├── application.yml <- Ancryptes by Ansible Vault prod pass
│   │   │   └── service.yml
│   │   ├── app2
│   │   │   ├── application.yml <- Ancryptes by Ansible Vault prod pass
│   │   │   └── service.yml

当然,还有两个主机文件:

产品:

[hosts]
prod_host1
prod_host2

[app1:children]
hosts

[app2:children]
hosts

测试:

[hosts]
test_host1
test_host2

[app1:children]
hosts

[app2:children]
hosts

在每个清单目录中有一个 ansible.cfg 文件,其中包含以下行:

inventory      = .
vault_password_file = /path/to/vault_password_file
remote_user = ssh_user
ask_pass = True

(最好将 /etc/ansible/ansible.cfg 复制到库存目录并更改您需要更改的内容。)

完成设置后,进入 prodtest 目录,然后从那里执行剧本。当然,您需要指定剧本的路径:

cd prod
ansible-playbook /path/to/playbooks/app_playbook.yml

cd test
ansible-playbook /path/to/playbooks/app_playbook.yml

相信我,库存分离让生活变得更轻松。

祝你好运!