Перезапуск сетевых интерфейсов, которые были изменены с помощью ansible

У меня есть доступная роль, которая

- 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» только в список, который я могу использовать в обработчике, или есть способ заставить обработчики запускаться для каждого элемента?

0
задан 29 May 2016 в 13:47
1 ответ

Итак, вы действительно не можете сделать что-то конкретное в 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 }}"
2
ответ дан 4 December 2019 в 13:41

Теги

Похожие вопросы