как передать массив ansible group_vars в шаблон jinja - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь шаблонизировать скрипт на python, используя ansible jinja2. Когда я передаю повторяющийся элемент в шаблон для дальнейшей генерации Python словарь не работает.

Заранее спасибо за любую помощь!

[group_vars]
backups:
- sap

sap:
- db_host: sadf
- db_name: xyz
- db_user: xzzx
- db_pass: alskdf

ответный шаблон выглядит так:

- name: transfer backup script file
  template:
    src: backup.py.j2
    dest: "{{ item }}_backup.py"
    mode: 0755
  with_items:
    - "{{ backups }}"

шаблон jinja python выглядит так:

dbs = {
  {% for mongo_d in item %}

    "{{ mongo_d.db_name }}" :
    {
    "db_host": "{{ mongo_d.db_host }}",
    "db_user": "{{ mongo_d.db_user }}",
    "db_password": "{{ mongo_d.db_password }}",
 ]},

 {% endfor %}

с ошибкой:

item: sap
  msg: 'AnsibleUndefinedVariable: ''unicode object'' has no attribute ''db_name'''

1 Ответ

0 голосов
/ 03 сентября 2018

Ваша структура данных громоздка, используйте словарь вместо списка с одиночными парами ключ-значение:

backups:
  - sap

sap:
  db_host: sadf
  db_name: xyz
  db_user: xzzx
  db_password: alskdf

Вам не нужно повторять внутри шаблона.

Задача:

- name: transfer backup script file
  template:
    src: backup.py.j2
    dest: "{{ item }}_backup.py"
    mode: 0755
  with_items:
    - "{{ backups }}"
  vars:
    mongo_d: "{{ lookup('vars', item) }}"

Шаблон:

dbs = {
    "{{ mongo_d.db_name }}" :
    {
    "db_host": "{{ mongo_d.db_host }}",
    "db_user": "{{ mongo_d.db_user }}",
    "db_password": "{{ mongo_d.db_password }}",
 ]},

Я исправил db_password опечатку, но из-за несоответствий в шаблоне я оставил их как указано в вопросе.

...