jinja2 - AnsibleUndefinedVariable:' dict object'没有属性'" {{target_hosts}}"'"

时间:2018-05-18 13:06:16

标签: ansible jinja2

这是我更新/ etc / hosts文件的Ansible playbook:

- 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 ']),一切正常,但我想使用变量,通过dinamically传递给剧本。

我得到的错误是:

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

使用调试消息我确定该剧本获得参数:

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

也许j2模板没有? 语法错了吗?我用引号,双引号和两个组合试了两个。

1 个答案:

答案 0 :(得分:3)

  

语法错了吗?

是。不要忍受Jinja2的表达。在您{{内的{%内。

正确的语法:

{% for item in groups[target_hosts] %}