0

我对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

当我运行 playbook 命令时:

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

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

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

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

4

1 回答 1

0

就个人而言,我认为您的库存结构是一个坏主意。我不赞成将 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到库存目录并更改您需要更改的内容。)

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

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

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

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

祝你好运!

于 2019-02-20T15:42:42.287 回答