jinja2 - AnsibleUndefinedVariable: 'объект dict' не имеет атрибута '"{{target_hosts}}"' " - PullRequest
0 голосов
/ 18 мая 2018

Это мой Ansible playbook для обновления файла / etc / hosts:

- name: Update /etc/hosts file
  hosts: "{{ target_hosts }}"
  remote_user: awx
  become: yes
  become_method: sudo
  tasks:

    - debug:
        msg: 'show me the variable: {{ target_hosts }}'

    - name: Update /etc/hosts file
      template: src=../../templates/hosts.j2 dest=/etc/hosts

А это шаблон jinja:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

{% for item in groups['"{{ target_hosts }}"'] %}
{{ hostvars[item]['ansible_ssh_host'] }} {{ hostvars[item]['openstack']['name'] }}
{% endfor %}

Все работает нормально, если я установил статическое значениев шаблоне (например, для элемента в группах [' my-server-group ']), но я хотел бы использовать переменную, динамически передаваемую в playbook.

ОшибкаЯ получаю это:

AnsibleUndefinedVariable: 'dict object' has no attribute '\"{{ target_hosts }}\"'"

С сообщением об отладке я уверен, что playbook получает параметр:

> "msg": "show me the variable: my-server-group". 

Может быть, шаблон j2 нет?
синтаксис неправильный?Я пробовал оба с кавычками, двойными кавычками и комбинацией двух.

1 Ответ

0 голосов
/ 18 мая 2018

Синтаксис неверен?

Да.Не вкладывайте выражения Jinja2.В вашем случае {{ внутри {%.

Правильный синтаксис:

{% for item in groups[target_hosts] %}
...