Ansible en IOS para recorrer un subconjunto de interfaces

Ansible en IOS para recorrer un subconjunto de interfaces

Ejecutando WISL en Windows 10 y Ubuntu con ansible 2.9.9. Soy nuevo en Ansible. Ejecuto un show en un dispositivo Cisco para mostrar las interfaces en las que se ejecuta un protocolo de red determinado. Luego quiero extraer las interfaces y ejecutar comandos en ellas. En este caso para apagar el protocolo. Idealmente, el comando show podría cambiar fácilmente. Como ocurre con muchos protocolos, esta es la forma consistente en que verificaría este estado. Puede haber formas en que Ansible almacene esta información de protocolo. ¿Quizás con hechos? Encontré ejemplos usando ios_config enhttps://docs.ansible.com/ansible/latest/modules/ios_config_module.htmlpero las interfaces están codificadas como se muestra aquí con el ejemplo auxiliar:

- 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

Mi intento es el siguiente que me da las dos interfaces con multidifusión activa. Pero, ¿qué sigue para actuar en esas interfaces en un bucle? :

  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"
    ]
}

Muchas gracias por cualquier orientación.

Respuesta1

Aquí es donde usas unloop(lo que también desde la versión 2.5 ha provocado que todas with_las directivas queden obsoletas, aunque muchos de los documentos aún no reflejan esto).

Modificar el ejemplo de Ansible nos da:

- 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 }}'

Para simplemente inspeccionar la salida:

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

Esto loopfue modificado deCómo anteponer cada cadena en una lista con un prefijo en Ansible.

información relacionada