
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 loop
fue modificado deCómo anteponer cada cadena en una lista con un prefijo en Ansible.