LINUX.ORG.RU
решено ФорумAdmin

Ошибка в Ansible Vault format unhexlify error

 


0

2

Добрый день.

Создал такой playbook для установки NGINX.

---

 - name: Test
   hosts: NGINX
   become: yes
   vars:
    ansible_become_pass: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          65346132306161393738343664343463653633346237613535343034623830313337356635633862
          3962306134336531353730653539316136623131313931370a663630383765393932623966333632
          63666235613838633264383963323931303364656638626166316234666164363063623136383930
          3862376163616633360a383439353938386538323231623437363866643462663737363036356466
          3730

   tasks:
    - name: Install
      yum: name=nginx state=latest
...

Пароль зашифрован с помощью ansible-vault encrypt_string.

При запуске ошибка FAILED! => {«msg»: «Vault format unhexlify error: Odd-length string»}

Как её можно исправить ?


Используй нормальный зашифрованный файл, а не строку в плейбуке

ansible-vault edit inventory/group_vars/all/vault
vault_ansible_become_pass: password

# In inventory/group_vars/all/vars
ansible_become_pass: '{{ vault_ansible_become_pass }}'

# In ansible.cfg
vault_password_file = .vault.pass

echo vault_pass > .vault.pass
Difrex ★★★★ ()
Ответ на: комментарий от Difrex

Решение

То есть получиться так.

1) Создаём vault

ansible-vault create secret

С таким содержанием

sudo_pass: F9eEYSzd

2) Исправляем playbook

---

 - name: Test
   hosts: NGINX
   become: yes
   vars:
    ansible_become_pass: '{{sudo_pass}}'

   tasks:
    - name: Install
      yum: name=nginx state=latest

...

А как указать, чтобы брать значение переменной sudo_pass из vault ?

beren ()
Ответ на: Решение от beren

Положи в файл defaults/main.yml

my_super_secret_pass: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          63373731366336635316663236323831646534366237653866
          62386530646538373863736663733306535663393961353935
          34366636736302616133365313943062306533333931356264
          37386633933640a65303916383731637303135464623362730
          3435 

antiZzz ()
Ответ на: комментарий от Difrex

Решение

Сделал так

В playbook

---

 - name: Test
   hosts: NGINX
   become: yes
   vars:
    ansible_become_pass: '{{sudo_pass}}'

   tasks:
    - name: Install
      yum: name=nginx state=latest

...

В ansible.cfg

[defaults]
inventory = /home/tes/ansible/hosts
vault_password_file = /home/test/ansible/secret

В /home/test/ansible/secret

sudo_pass: testtets
~

При запуске ansible-playbook test.yml --ask-vault-pass

[WARNING]: Error in vault password file loading (default): A vault password must be specified to decrypt data

То есть в vault_password_file = /home/test/ansible/secret это не файл с паролем для sudo, а файл для расшифровки vault. Тогда как указать откуда брать файл с паролем для sudo ?

beren ()
Ответ на: Решение от beren

Решение

Отбой.

Получилось так


---

 - name: Test
   hosts: NGINX
   become: yes
   vars_files:
   - /home/kleusvl/ansible/secret
   vars:
    ansible_become_pass: '{{sudo_pass}}'

   tasks:
    - name: Install
      yum: name=nginx state=latest

...

Наверно, это самый безопасный вариант )

beren ()
Ответ на: Роль от beren

Проблемы

В playbook такое:

---

 - name: Test
   hosts: NGINX
   become: yes
   vars_files:
   - /home/test/ansible/secret

   roles:
    - /home/test/ansible/roles/deploy_NGINX

...

В /home/tes/ansible/roles/deploy_NGINX/defaults/main.yml такое

---
# defaults file for deploy_NGINX
vault_password_file: /home/test/ansible/pass
ansible_become_pass: '{{sudo_pass}}'

Отсюда два вопроса: 1) Куда можно убрать vars_files: - /home/test/ansible/secret

2) При запуске ошибка playbook

 fatal: [testserver]: FAILED! => {"changed": false, "msg": "No package matching 'Nginx' found available, installed or updated", "rc": 126, "results": ["No package matching 'Nginx' found available, installed or updated"]} 

Хотя Nginx там не установлен.

beren ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.