
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 loop
wurde geändert vonSo stellen Sie in Ansible jedem String in einer Liste ein Präfix voran.