Использование хранилища в Ansible дает: невозможно объединить 'str' и 'AnsibleVaultEncryptedUnicode'

Я пытаюсь использовать debops.nullmailer на Ansible (2.4) для настройки nullmailer на моих хостах. Я хочу, чтобы пароль был зашифрован в переменной, поэтому я собираюсь использовать функциональность хранилища для шифрования секрета. Мой playbook выглядит так:

---
- name: My baseline
  hosts: all
  become: true
  vars:
    nullmailer__default_remotes:
     - port: "587"
       host: smtp.mailgun.org
       user: myusername
       pass: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          6430...63433
  roles:
    - role: debops.nullmailer

Однако, применяя это с --ask-vault-pass выдает длинную ошибку:

ЗАДАНИЕ [debops.nullmailer: создание личных файлов конфигурации] *******************************************************************************************************************************************************************************
роковой: [talkbot]: не удалось! => {"fail": true, "msg": "[{u'dest': u'/etc/nullmailer/remotes', u'content': u\"{{ lookup('template', 'lookup/nullmailer__remotes.j2') | from_yaml | join('\n') }}\", u'group': u'mail', u'mode': u'0600', u'owner': u'mail'}]: во время выполнения возникло необработанное исключение поисковый плагин 'template'. Ошибка: исходное сообщение: произошла непредвиденная ошибка типа шаблона ({% set nullmailer__tpl_remotes = [] %}\n{% для записи в (nullmailer__default_remotes + nullmailer__remotes) %}\n{% set nullmailer__tpl_entry = [] %}\n{%, если запись является строкой%}\n{% set _ = nullmailer__tpl_remotes.append(entry) %}\n{% elif запись сопоставляется%}\n{% if entry.host|d() %}\n{% set _ = nullmailer__tpl_entry.append(entry.host) %}\n{% set _ = nullmailer__tpl_entry.append(entry.protocol|d('smtp')))%}\n{% if (((entry.starttls|d() и entry.starttls|bool) или nullmailer__starttls|bool) и (entry.ssl не определено или не entry.ssl|bool) и (entry.options не определена или не entry.options)) %}\n{% set _ = nullmailer__tpl_entry.append('- starttls') %}\n{% endif %}\n{% if entry.ssl|d() и entry.ssl|bool %}\n{% set _ = nullmailer__tpl_entry.append('- ssl') %}\n{% endif %}\n{% if entry.insecure|d() и entry.insecure|bool %}\n{% set _ = nullmailer__tpl_entry.append('-insecure') %}\n{% endif %}\n{% if entry.x509fmtder|d() и entry.x509fmtder|bool %}\n{% set _ = nullmailer__tpl_entry.append('-x509fmtder') %}\n{% endif %}\n{% if entry.x509cafile|d() %}\n{% set _ = nullmailer__tpl_entry.append('-x509cafile=' + entry.x509cafile) %}\n{% endif %}\n{% if entry.x509certfile | d ()%} \ n {% set _ = nullmailer__tpl_entry.append ('-x509certfile=' + entry.x509certfile) %}\n{% endif %}\n{% if entry.x509crlfile | d ()%} \ n {% set _ = nullmailer__tpl_entry.append ('-x509crlfile=' + entry.x509crlfile)%} \ n {% endif%} \ n {% if entry.port | d ()%} \ n {% set _ = nullmailer__tpl_entry.append ('-port=' + entry.port) %}\n{% endif %}\n{% if ((entry.auth|d() и entry.auth|bool) или (entry.auth_login|d() и entry.auth_login|bool)) %}\n{% set _ = nullmailer__tpl_entry.append('- auth-login') %}\n{% endif %}\n{% if entry.user|d() %}\n{% set _ = nullmailer__tpl_entry.append('- user=' + entry.user) %}\n{% endif %}\n{% if entry.password|d() или entry.pass|d() %}\n{% set _ = nullmailer__tpl_entry.append('- pass=' + (entry.password | d(entry.pass))) %}\n{% endif %}\n{% if entry.options|d() %}\n{% set _ = nullmailer__tpl_entry.append(entry.options, если entry.options имеет значение строка else entry.options|join(' ')) %}\n{% endif %}\n{% set _ = nullmailer__tpl_remotes.append(nullmailer__tpl_entry | join(' ')) %}\n{% endif %}\n{% endif %}\n{% endfor %}\n{% if nullmailer__tpl_remotes %}\n{% для записи в nullmailer__tpl_remotes %}\n- '{{ entry }}'\n{% endfor %}\n{% else %}\n- ''\n{% endif %}\n): невозможно объединить объекты 'str' и 'AnsibleVaultEncryptedUnicode'}}

Вынимая pass переменная заставляет его работать успешно, но, очевидно, без --pass= параметр в /etc/nullmailer/remotes необходимо.

Я довольно новичок в ansible - что здесь происходит? Почему он пытается объединить str и AnsibleVaultEncryptedUnicode? Расшифровка не работает?

1 ответ

Расшифровка не работает?

Это даже не делается, когда внутри Jinja2 (Python) используется зашифрованная переменная Ansible Vault. append метод.

Тем не менее, скорее всего, вы должны:

  • использовать файл Ansible Vault вместо переменной или

  • зарегистрировать проблему на GitHub / fix ansible-nullmailer спроектировать себя, чтобы справиться с ситуацией.

Другие вопросы по тегам