Цикл через хосты с использованием шаблона Jinja2 - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть файл hosts, как показано ниже

[test1]
10.33.11.198
10.33.11.185

Я использую шаблон, как показано ниже

{% for i in groups['test1'] %}
IP{{ i }}={{ hostvars[groups['test1'][i]]['ansible_default_ipv4']['address'] }}
{% endfor %}

мое ожидание

IP0=10.33.11.198
IP1=10.33.11.185

но я получаю ошибку ниже.

fatal: [10.33.11.198]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'list object' has no attribute u'10.33.11.198'"}
fatal: [10.33.11.185]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'list object' has no attribute u'10.33.11.198'"}

Любая помощь будет оценена.

1 Ответ

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

Ваша проблема в том, что я не индекс, а элемент списка.Попробуйте

{% for i in groups['test1'] %}
IP{{ loop.index0 }}={{ hostvars[i]['ansible_default_ipv4']['address'] }}
{% endfor %}

Проверьте Jinja2 для оператора

Попробуйте минимальный пример:

hosts:

[test1]
10.33.11.198
10.33.11.185

и x.yml (заменил ['ansible_default_ipv4']['address'] на inventory_hostname)

- hosts: localhost
  tasks:
   - debug: msg="{% for i in groups['test1'] %}\nIP{{ loop.index0 }}={{ hostvars[i].inventory_hostname }}\n{% endfor %}"

, работает:

$ ansible-playbook -i hosts x.yml 

PLAY [localhost] ***************************************************************************************

TASK [Gathering Facts] *********************************************************************************
ok: [localhost]

TASK [debug] *******************************************************************************************
ok: [localhost] => {
    "msg": "IP0=10.33.11.198\nIP1=10.33.11.185\n"
}

PLAY RECAP *********************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   
...