Назад | Перейти на главную страницу

Ansible: запретить интерпретацию содержимого переменной как JSON / YAML

Я пытаюсь использовать Ansible для настройки файла конфигурации в стиле ini, где одно значение отформатировано как данные JSON.

Я пробовал следующую задачу:

- name: Update configuration
  ini_file:
    dest: "{{ service_root }}/etc/production.ini"
    create: no
    section: app:main
    option: "{{ item.option }}"
    value: "{{ item.value }}"
    mode: '0640'
  notify: Reload Apache configuration
  with_list:
    - option: repoze.who.auth_tkt.secret
      value: "{{ secrets.auth_tkt }}"
    - option: oidc.client_config
      value: "{{ oidc_client_config | to_json }}"
  loop_control:
    label: "{{ item.option }}"

К сожалению, когда я пытаюсь это сделать, oidc.client_config не отформатирован должным образом: строки находятся между символами одинарной кавычки вместо двойных кавычек, а ложное значение отображается как False вместо того false

Насколько я понимаю, когда я использую item.value переменная, Ansible видит, что она похожа на JSON, декодирует ее, а затем преобразует в строку, используя Python str() функция.

Я попробовал одноразовую задачу:

- name: Update configuration
  ini_file:
    dest: "{{ service_root }}/etc/production.ini"
    create: no
    section: app:main
    option: oidc.client_config
    value: "{{ oidc_client_config | to_json }}"
    mode: '0640'
  notify: Reload Apache configuration

Этот работает нормально, я получаю значение, отформатированное как ожидалось в моем файле конфигурации. Следовательно, я могу разделить свою первоначальную задачу, и тогда она будет работать нормально, но мне это решение не нравится.

Есть ли способ предотвратить интерпретацию item.value переменная как JSON / YAML?

Как бы то ни было, в настоящее время я использую (довольно древний) Ansible 2.2.

В разделе расширенного синтаксиса руководства (https://docs.ansible.com/ansible/latest/user_guide/playbooks_advanced_syntax.html) есть раздел о небезопасных или необработанных строках. Насколько я понимаю, вы можете просто пометить свое значение как небезопасное, и оно не будет интерпретировано:

value: !unsafe "{{ oidc_client_config | to_json }}"