Как я могу использовать зашифрованный пароль ansible-vault в файле инвентаризации?

Я хочу использовать зашифрованный пароль в моем файле инвентаря с помощью ansible-vault, а затем запускать playbook для этого файла. Что-то вроде:

ansible-playbook --ask-vault-pass -i inventory test.yml

Я пробовал использовать один пароль для всех хостов, и он работал нормально, но для разных хостов нужно использовать разные пароли. Как мы можем использовать переменную, сгенерированную с помощью ansible-vault, в файле инвентаризации?

Вот код, который мне надоел:

Создать зашифрованную строку ansible-vault

ansible-vault encrypt_string 'abc123' --name ansible_ssh_pass > a_password_file

файл test.yml

- hosts: hostgroup_1
  vars_files:
    - a_password_file
  tasks:
    - command: date
      register: output

    - debug:
        msg: "{{ output.stdout }}"

инвентарный файл:

[hostgroup_1]
xxx.xxx.com ansible_host=xx.xx.xx.xx ansible_user=root
xxx.xxx.com ansible_host=xx.xx.xx.xx ansible_user=root

[hostgroup_2]
xxx.xxx.com ansible_host=xx.xx.xx.xx ansible_user=root

Выход:

ansible-playbook -i inventory --ask-vault-pass test.yml

Vault password:

PLAY [valut test] *****************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************
ok: [xxx.xxx.com]
ok: [xxx.xxx.com]

TASK [command] ********************************************************************************************************************************************
changed: [xxx.xxx.com]
changed: [xxx.xxx.com]

TASK [debug] **********************************************************************************************************************************************
ok: [xxx.xxx.com] => {
    "msg": "XXX XXX  XX XX:XX:XX XXX XXXX"
}
ok: [xxx.xxx.com] => {
    "msg": "XXX XXX  XX XX:XX:XX XXX XXXX"
}

PLAY RECAP ************************************************************************************************************************************************
xxx.xxx.com : ok=3    changed=1    unreachable=0    failed=0
xxx.xxx.com : ok=3    changed=1    unreachable=0    failed=0

В приведенном выше коде я использовал один и тот же ansible_ssh_pass для всех хостов, но хочу использовать файл инвентаризации ниже, который включает разные пароли для каждого хоста.

инвентарный файл:

[hostgroup_1]
xxx.xxx.com ansible_host=xx.xx.xx.xx ansible_user=root  ansible_ssh_pass=abc123
xxx.xxx.com ansible_host=xx.xx.xx.xx ansible_user=root  ansible_ssh_pass=123abc

[hostgroup_2]
xxx.xxx.com ansible_host=xx.xx.xx.xx ansible_user=root  ansible_ssh_pass=xyz098

person Vaibhav    schedule 08.02.2018    source источник


Ответы (1)


Сохраните зашифрованные файлы хранилища в host_vars подкаталоге инвентаризации для каждого хоста соответственно.

См. Разделение хоста и группы Конкретные данные для подробностей.

person techraf    schedule 08.02.2018
comment
Я обновил playbook test.yml, как показано ниже - - hosts: hostgroup_1, hostgroup_2 vars_files: - group_vars / hostgroup_1 / a_password_file - group_vars / hostgroup_2 / a_password_file tasks: - command: date register: output - debug: msg: {{output.stdout} } Но это дает противоречивые результаты. Иногда он может подключиться ко всем хостам группы, а иногда и частично. - person Vaibhav; 09.02.2018
comment
И почему вы решили сообщить мне, что не собираетесь следовать моему ответу? Вам не следует явно включать файл vars. - person techraf; 09.02.2018