es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reemplazo de expresiones regulares en Ansible en variables a nombres de interfaz de Cisco.

Actualmente estoy trabajando con un script para crear descripciones de interfaz basadas en la información del vecino CDP, pero está colocando los nombres completos, por ejemplo, GigabitEthernet1/1/1, HundredGigabitEthernet1/1/1.

Mi regex es débil, pero me gustaría hacer una sustitución de regex para mantener solo los primeros 3 caracteres del nombre de la interfaz.

Creo que un patrón como (dredGigatbitEthernet|abitEthernet|ntyGigabitEthernet|etc) debería funcionar, pero no estoy seguro de cómo ponerlo en la línea de comando de la lista de reproducción a continuación para modificar el valor del puerto.

nxos_config:
  lines:
  - description {{ item.value[0].port }} ON {{ item.value[0].host }}

Por ejemplo, busco que GigabitEthernet1/1/1 termine como Gig1/1/1.

Aquí hay un ejemplo de los datos de entrada:

{ 
  "FastEthernet1/1/1": [{
    "host": "nombre de host", 
    "port": "Puerto 1"
  }] 
}

Jugada final para corregirlo usando los vecinos de Ansible net como origen

Gracias - Actualicé mi jugada, ajustada para los vecinos de Ansible net

- name: Establece descripción de interfaz basada en el descubrimiento de CDP/LLDP
  hosts: all
  gather_facts: yes
  connection: network_cli
  tasks:
    - debug:
        msg: "{{ ansible_facts.net_neighbors }}"
    - debug:
        msg: >- 
          description
          {{
            item[0].port 
            | regex_search('(.{3}).*([0-9]+/[0-9]+/[0-9]+)', '\\1', '\\2') 
            | join 
          }}
          ON {{ item.value[0].host }}"
      loop: "{{ ansible_facts.net_neighbors | dict2items }}"
      loop_control:
        label: "{{ item.key }}"

¡Gracias por la sugerencia!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Reproductor de Ansible para modificar nombres de interfaces usando regex

    Como especialista en TI especializado en Ansible y programación de redes, actualmente estás trabajando en un script para crear descripciones de interfaces basadas en información de vecinos CDP. Sin embargo, el script actual está colocando los nombres completos de las interfaces, lo cual no es deseado. Quieres modificar el script para mantener solo los primeros 3 caracteres del nombre de la interfaz utilizando regex para realizar un reemplazo.

    Creas que un patrón como (dredGigatbitEthernet|abitEthernet|ntyGigabitEthernet|etc) debería funcionar para esta tarea. Sin embargo, no estás seguro de cómo modificar el valor del puerto para lograr el resultado deseado.

    Aquí tienes un ejemplo de los datos de entrada:

    { 
      "FastEthernet1/1/1": [{
        "host": "hostname", 
        "port": "Port 1"  
      }] 
    }
    

    Para lograr el resultado deseado, has actualizado tu reproducción, ajustándote a los vecinos de Ansible. Aquí tienes el playbook final para hacer la modificación:

    - name: Establecer descripción de la interfaz basada en el descubrimiento CDP/LLDP
      hosts: all
      gather_facts: yes
      connection: network_cli
      tasks:
        - debug:
            msg: "{{ ansible_facts.net_neighbors }}"
        - debug:
            msg: | 
              description
              {{
                item[0].port 
                | regex_search('(.{3}).*([0-9]+/[0-9]+/[0-9]+)', '\1', '\2') 
                | join 
              }}
              EN {{ item.value[0].host }}"
          loop: "{{ ansible_facts.net_neighbors | dict2items }}"
          loop_control:
            label: "{{ item.key }}"
    

    Con esta actualización, puedes lograr el resultado deseado de modificar los nombres de las interfaces utilizando regex. ¡Gracias por la ayuda!

Comments are closed.