Ansible no IOS para percorrer o subconjunto de interfaces

Ansible no IOS para percorrer o subconjunto de interfaces

Executando WISL no Windows 10 e Ubuntu com ansible 2.9.9. Eu sou novo no Ansible. Eu executo um show em um dispositivo Cisco para gerar as interfaces nas quais um determinado protocolo de rede é executado. Quero então extrair as interfaces e executar comandos nelas. Neste caso, desligue o protocolo. Idealmente, o comando show poderia mudar facilmente. Quanto a muitos protocolos, esta é a maneira consistente de verificar esse estado. Pode haver maneiras de o Ansible armazenar essas informações de protocolo. Talvez com fatos? Encontrei exemplos usando ios_config emhttps://docs.ansible.com/ansible/latest/modules/ios_config_module.htmlmas as interfaces são codificadas conforme mostrado aqui com o exemplo 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

Minha tentativa é a seguinte, o que me dá as duas interfaces com multicast ativo. Mas o que vem a seguir para agir nessas interfaces em um loop? :

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

Muito obrigado por qualquer orientação.

Responder1

É aqui que você usa umloop(o que também desde a versão 2.5 fez com que todas with_as diretivas fossem descontinuadas, embora muitos dos documentos ainda não reflitam isso).

Modificar o exemplo do Ansible nos dá:

- 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 apenas inspecionar a saída:

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

Isto loopfoi modificado deComo preceder cada string em uma lista com um prefixo no Ansible.

informação relacionada