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
复制到库存目录并更改您需要更改的内容。)
完成设置后,进入 prod
或 test
目录,然后从那里执行剧本。当然,您需要指定剧本的路径:
cd prod
ansible-playbook /path/to/playbooks/app_playbook.yml
cd test
ansible-playbook /path/to/playbooks/app_playbook.yml
相信我,库存分离让生活变得更轻松。
祝你好运!
我对 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
复制到库存目录并更改您需要更改的内容。)
完成设置后,进入 prod
或 test
目录,然后从那里执行剧本。当然,您需要指定剧本的路径:
cd prod
ansible-playbook /path/to/playbooks/app_playbook.yml
cd test
ansible-playbook /path/to/playbooks/app_playbook.yml
相信我,库存分离让生活变得更轻松。
祝你好运!