Ansible на IOS для циклического прохождения подмножества интерфейсов

Ansible на IOS для циклического прохождения подмножества интерфейсов

Запуск WISL на Windows 10 и Ubuntu с ansible 2.9.9. Я новичок в Ansible. Я запускаю show на устройстве Cisco, чтобы получить интерфейсы, на которых работает данный сетевой протокол. Затем я хочу извлечь интерфейсы и выполнить на них команды. В данном случае, чтобы отключить протокол. В идеале команда show может легко меняться. Что касается многих протоколов, то это последовательный способ, которым я бы проверил это состояние. Ansible может хранить эту информацию о протоколе. Может быть, с фактами? Я нашел примеры использования ios_config наhttps://docs.ansible.com/ansible/latest/modules/ios_config_module.htmlно интерфейсы жестко запрограммированы, как показано здесь на примере вспомогательного метода:

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: "{{ item }}"
  with_items:
    - interface Ethernet1
    - interface Ethernet2
    - interface GigabitEthernet1

Моя попытка заключается в следующем, что дает мне два интерфейса с активным multicast. Но что дальше делать с этими интерфейсами в цикле? :

  tasks:
  - name: Gather interfaces running PIM
    ios_command:
      commands:
        - show ip pim interface
    register: pim

  - name: Write PIM interface data to file
    copy:
      content: "{{pim.stdout_lines[0]}}"
      dest: "backups/{{ansible_alias}}-pim-interfaces.txt"


  - name: Glean PIM INTF's
    shell: cat backups/{{ ansible_alias }}-pim-interfaces.txt | tr ' ' '\n' | grep 'GigabitEthernet'
    register: pim

  - debug: msg='{{ pim.stdout_lines }}'


TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [10.239.121.2] => {
    "msg": [
        "GigabitEthernet0/0/0",
        "GigabitEthernet0/0/1.125"
    ]
}

Большое спасибо за любые рекомендации.

решение1

Здесь вы используетеloop(что также привело к тому, что с версии 2.5 все with_директивы были объявлены устаревшими, хотя большая часть документации пока не отражает этого).

Модификация примера Ansible дает нам:

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

Чтобы просто проверить вывод:

- debug:
    var: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

Это loopбыло изменено сКак добавить префикс к каждой строке в списке в Ansible.

Связанный контент