Ansible запросить пароль для ответного хранилища из других групп Vars - PullRequest
0 голосов
/ 20 февраля 2019

У меня проблема с 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

Я не знаюне знаю, как это исправить.

1 Ответ

0 голосов
/ 20 февраля 2019

Лично я думаю, что ваша структура инвентаря - плохая идея.Я не потворствую наличию серверов 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

И, конечно,, будет два файла хоста:

PROD:

[hosts]
prod_host1
prod_host2

[app1:children]
hosts

[app2:children]
hosts

TEST:

[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, и оттуда запустите playbook.Конечно, вам нужно будет указать путь к книгам:

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

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

Поверьте мне, с разделением инвентаря жизнь намного проще.

Удачи!

...