У меня есть доступная
роль, которая
- name: add virtual interface configs for vlan
template: src=ifcfg-eth.vlan.j2 dest=/etc/sysconfig/network-scripts/ifcfg-{{ item.device }}
with_items: "{{ vlan_interfaces }}"
tags: firewall_d-public-network-vlans
notify: restart vlan interfaces
и обработчик, который его обрабатывает
- name: restart vlan interfaces
command: bash -c "ifdown {{ item.device }} && ifup {{ item.device}}"
with_items: "{{ vlan_interfaces }}"
Но я не хочу запускать и останавливать все интерфейсы, только те, которые действительно изменились.
Есть ли способ отправить «item.device» только в список, который я могу использовать в обработчике, или есть способ заставить обработчики запускаться для каждого элемента?
Итак, вы действительно не можете сделать что-то конкретное в playbook для обработки каждого вызова в задачах with-items. Но вы действительно получаете результаты, которые можно зарегистрировать, а затем выполнять какие-либо действия в обработчике.
поэтому добавьте команду «register» к задаче
- name: add virtual interface configs for vlan
template: src=ifcfg-eth.vlan.j2 dest=/etc/sysconfig/network-scripts/ifcfg-{{ item.device }}
with_items: "{{ vlan_interfaces }}"
tags: firewall_d-public-network-vlans
register: add_virtual_interface_output
notify: restart vlan interfaces
и пропустите ее в обработчике. Поскольку вывод выглядит так:
"results": [
{
"_ansible_notify": [
"restart vlan interfaces"
],
"changed": false,
"gid": 0,
"group": "root",
"item": {
"device": "eth1.405",
"ipaddr": "172.16.55.5",
"lladr": "00:50:56:ab:5d:7c",
"network": "172.16.55.0",
"prefix": 24
},
"mode": "0644",
"owner": "root",
"path": "/etc/sysconfig/network-scripts/ifcfg-eth1.405",
"secontext": "system_u:object_r:net_conf_t:s0",
"size": 100,
"state": "file",
"uid": 0
},
...
]
вы можете проверить состояние "изменено" в каждом результате и перезапустить только те:
- name: restart vlan interfaces
# debug : msg="{{ item.changed }}"
command: bash -c "ifdown {{ item.item.device }} && ifup {{ item.item.device }}"
when: item.changed == true
with_items: "{{ add_virtual_interface_output.results }}"