Estoy tratando de ejecutar un comando en Ansible para encontrar a los vecinos en mi red:

- name: Get neighbors
  junos_rpc:
    rpc: "get-lldp-interface-neighbors"
    output: 'xml'
    args:
      interface_device: A
  register: net_topology

Entonces, mi problema surge cuando en esta tarea necesito recorrer una lista y dar otro argumento para el dispositivo de interfaz y registrar el resultado también en otra variable 'net_topology' cada vez.

0
Xenia Ioannidou 27 abr. 2020 a las 13:57

2 respuestas

La mejor respuesta
- name: Get neighbors
  junos_rpc:
    rpc: "get-lldp-interface-neighbors"
    output: 'xml'
    args:
      interface_device: "{{ item }}"
  loop:
    - A
    - B
    - C
  register: net_topology

Una vez que modifique su tarea de esta manera, se reproducirá tres veces: una para cada elemento en mi bucle de ejemplo. La variable item obtendrá el valor del elemento actual en la lista.

No necesita cambiar su variable register: se modificará automáticamente como se explica en documentación ansible:

Cuando usa register con un bucle, la estructura de datos colocada en la variable contendrá un atributo results que es una lista de todas las respuestas del módulo. Esto difiere de la estructura de datos devuelta cuando se usa register sin un bucle

Por lo tanto, puede inspeccionar todos sus resultados en una tarea posterior al recorrer net_topology.results que contiene la lista de resultados individuales.

2
Zeitounator 27 abr. 2020 a las 11:54

En realidad hice algo similar con lo anterior, pero acabo de pasar mi lista de una manera diferente:

- name: building network topology
  junos_rpc:
    rpc: "get-lldp-interface-neighbors"
    output: 'xml'
    args:
      interface_device: "{{item}}"
  loop:
    "{{my_list}}"
  register: net_topology

Y esto es lo mismo que hacer esto también:

- name: building network topology
  junos_rpc:
    rpc: "get-lldp-interface-neighbors"
    output: 'xml'
    args:
      interface_device: "{{item}}"
  with_items:
    "{{my_list}}"
  register: net_topology

Debo decir que mi error inicial fue la sangría del bucle, porque se colocó dentro del junos rpc y al hacer esto no pude obtener ningún resultado.

0
Xenia Ioannidou 27 abr. 2020 a las 17:09