Этот синтаксис недействителен:
{% for interface in [inventory_hostname].interfaces %}
Вы используете скобки, такие как [...]
...
- Для индексирования списка, например
my_var[0]
или my_var[1]
- Для доступа к значению словаря, например
my_var['name']
или my_var['size']
- Для создания списка, например
[1, 2, 3, 4, 5]
Но вы не можете их использоватькак вы пытаетесь их использовать.
Есть несколько способов решить эту проблему.Я думаю, что наиболее элегантным решением было бы перенести настройки из group_vars/all
и вместо этого создать:
host_vars/router1.yml
со следующим содержимым:
interfaces:
- { name: ge-0/0/0, ipv4_address: 192.168.0.11, ipv4_mask: '24' }
- { name: ge-0/0/1, ipv4_address: 192.168.1.11, ipv4_mask: '24' }
host_vars/router2.yml
со следующим содержанием:
interfaces:
- { name: ge-0/0/0, ipv4_address: 192.168.0.12, ipv4_mask: '24' }
- { name: ge-0/0/1, ipv4_address: 192.168.1.12, ipv4_mask: '24' }
С этим, ваш шаблон просто становится:
{% for interface in interfaces %}
Ион будет использовать правильное значение для любого хоста, на который на данный момент нацелена задача.
Если вам действительно нужно сохранить текущую конфигурацию, вы можете использовать поиск vars
, например:
{% for interface in lookup('vars', inventory_hostname).interfaces %}
... но я действительно думаю, что вы найдете вещи более управляемыми, если вы реструктурируете свои данные.