Ansible auf IOS zum Durchlaufen einer Teilmenge von Schnittstellen

Ansible auf IOS zum Durchlaufen einer Teilmenge von Schnittstellen

WISL wird unter Windows 10 und Ubuntu mit Ansible 2.9.9 ausgeführt. Ich bin neu bei Ansible. Ich führe ein Show auf einem Cisco-Gerät aus, um die Schnittstellen anzuzeigen, auf denen ein bestimmtes Netzwerkprotokoll ausgeführt wird. Dann möchte ich die Schnittstellen extrahieren und Befehle darauf ausführen. In diesem Fall, um das Protokoll auszuschalten. Idealerweise könnte sich der Show-Befehl leicht ändern. Wie bei vielen Protokollen ist dies die konsistente Art und Weise, wie ich diesen Status überprüfen würde. Es gibt möglicherweise Möglichkeiten, wie Ansible diese Protokollinformationen speichert. Vielleicht mit Fakten? Ich habe Beispiele mit ios_config unter gefunden.https://docs.ansible.com/ansible/latest/modules/ios_config_module.htmlaber die Schnittstellen sind fest codiert, wie hier im Hilfsbeispiel gezeigt:

- 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

Mein Versuch sieht wie folgt aus und gibt mir die beiden Schnittstellen mit aktivem Multicast. Aber was passiert als nächstes, um in einer Schleife auf diese Schnittstellen einzuwirken?:

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

Vielen Dank für alle Hinweise.

Antwort1

Hier verwenden Sie einloop(was seit 2.5 auch dazu geführt hat, with_dass alle Anweisungen veraltet sind, obwohl dies in vielen Dokumenten noch nicht berücksichtigt ist).

Durch Ändern des Ansible-Beispiels erhalten wir:

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

So überprüfen Sie einfach die Ausgabe:

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

Dies loopwurde geändert vonSo stellen Sie in Ansible jedem String in einer Liste ein Präfix voran.

verwandte Informationen