Я хочу использовать зашифрованный пароль в моем файле инвентаря с помощью 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