У меня есть файл 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'"}
Любая помощь будет оценена по достоинству.
Ваша проблема в том, что я не индекс, а элемент списка. Пытаться
{% for i in groups['test1'] %}
IP{{ loop.index0 }} = {{ hostvars[i]['ansible_default_ipv4']['address'] }}
{% endfor %}
Проверить Jinja2 для заявления
Попробуем минимальный пример:
хосты:
[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