arubanetworks.aoscx_role

aoscx

Este rol de Ansible para redes proporciona un conjunto de módulos de gestión de configuración dependientes de la plataforma, específicamente diseñados para el dispositivo de red AOS-CX.

Requisitos

  • Python 3 o superior
  • Ansible 2.8.1 o superior
    • Consulta la documentación de Ansible para los pasos de instalación
    • Ansible 2.10+ requiere que se instale la colección ansible.netcommon
  • Versión mínima del firmware AOS-CX: 10.04.
  • Habilita REST en tu dispositivo AOS-CX con los siguientes comandos:
    switch(config)# https-server rest access-mode read-write
    switch(config)# https-server vrf mgmt
    

Instalación

A través de Galaxy:

ansible-galaxy install arubanetworks.aoscx_role

Ejemplo de salida:

Iniciando el proceso de instalación del rol galaxy
- descargando el rol 'aoscx_role', propiedad de arubanetworks
- descargando el rol desde https://github.com/aruba/aoscx-ansible-role/archive/3.0.1.tar.gz
- extrayendo arubanetworks.aoscx_role en /users/chiapuzi/.ansible/roles/arubanetworks.aoscx_role
- arubanetworks.aoscx_role (3.0.1) se instaló correctamente
ansible-control-machine$
  • Cambia al directorio de roles donde se instaló el rol de Ansible, ejecuta ansible-galaxy role list para encontrar:

    ansible-control-machine$ansible-galaxy role list
    # /users/chiapuzi/.ansible/roles
    - arubanetworks.aoscx_role, 3.0.1
    - arubanetworks.aruba_central_role, 0.1.0
    [ADVERTENCIA]: - la ruta configurada /usr/share/ansible/roles no existe.
    [ADVERTENCIA]: - la ruta configurada /etc/ansible/roles no existe.
    ansible-control-machine$cd /users/chiapuzi/.ansible/roles/arubanetworks.aoscx_role/
    ansible-control-machine$ls
    cliconf_plugins     httpapi_plugins  README.md         terminal_plugins
    connection_plugins  library          RELEASE-NOTES.md
    CONTRIBUTING.md     meta             requirements.txt
    docs                module_utils     requirements.yml
    ansible-control-machine$
    
    • Instala todos los requisitos de Ansible con el siguiente comando:
      ansible-galaxy install -r requirements.yml
      
    • Instala todos los requisitos de Python con el siguiente comando:
      python3 -m pip install -r requirements.txt
      
  • Regresa a tu directorio de trabajo y comienza a automatizar:

    ansible-control-machine$cd /users/chiapuzi/Desktop/sandbox/
    

Módulos SSH/CLI

  • Para usar los módulos SSH/CLI aoscx_config y aoscx_command, el acceso SSH debe estar habilitado en tu dispositivo AOS-CX. Está habilitado por defecto.
    • Si es necesario, vuelve a habilitar el acceso SSH en el dispositivo con el siguiente comando:
    switch(config)# ssh server vrf mgmt
    
  • El archivo known_hosts de la máquina de control debe contener la clave pública del dispositivo objetivo.
    • Alternativamente, se puede deshabilitar la verificación de claves de host por la máquina de control, aunque no se recomienda.
    • Para deshabilitar la verificación de claves de host, modifica el archivo ansible.cfg (por defecto /etc/ansible/ansible.cfg) para incluir: host_key_checking = false

Limitaciones y Notas

  • El tiempo de espera de comando por defecto es de 30 segundos. Si un comando tarda más de 30 segundos en ejecutarse, la tarea se agotará.
    • Si regularmente encuentras el error command timeout triggered, timeout value es 30 secs, considera establecer la variable de entorno ANSIBLE_PERSISTENT_COMMAND_TIMEOUT a un valor mayor. Consulta la documentación de Ansible aquí.

Variables de Inventario

Las variables que deben definirse en tu inventario para tu host AOS-CX son:

  • ansible_host: Dirección IP del switch en formato A.B.C.D. Para hosts IPv6 usa una cadena y colócala entre corchetes, por ejemplo '[2001::1]'.
  • ansible_user: Nombre de usuario para el switch en formato de texto plano
  • ansible_password: Contraseña para el switch en formato de texto plano
  • ansible_network_os: Debe estar siempre configurado como aoscx
  • ansible_connection: Configurado como httpapi para usar módulos de la API REST, como network_cli para usar módulos SSH/CLI y como aoscx para usar módulos pyaoscx
    • Consulta más abajo para obtener información sobre nuestra nueva implementación pyaoscx de los módulos de Ansible para AOS-CX que será el estándar a futuro
    • Consulta más abajo para obtener información sobre cómo usar tanto módulos de la API REST como módulos SSH/CLI en un host
  • ansible_httpapi_use_ssl: (Solo requerido para módulos de la API REST) Debe ser siempre True ya que AOS-CX utiliza el puerto 443 para REST
  • ansible_httpapi_validate_certs: (Solo requerido para módulos de la API REST) Establecer True o False dependiendo de si Ansible debe intentar validar certificados
  • ansible_acx_no_proxy: Establecer en True o False según si Ansible debe omitir proxies de entorno para conectarse a AOS-CX
  • ansible_aoscx_validate_certs: Establecer en True o False según si Ansible debe omitir la validación de certificados para conectarse a AOS-CX. Solo requerido cuando ansible_connection está configurado como aoscx
  • ansible_aoscx_use_proxy: Establecer en True o False según si Ansible debe omitir proxies de entorno para conectarse a AOS-CX. Solo requerido cuando ansible_connection está configurado como aoscx.

Módulos pyaoscx

Con el esfuerzo de utilizar nuestro SDK de Python recientemente actualizado para AOS-CX Pyaoscx hemos rediseñado nuestra integración de Ansible utilizando pyaoscx para todos los módulos basados en la API REST.
¿Qué significa esto si he estado usando Ansible con módulos de la API REST de AOS-CX?
Nuestra implementación anterior seguirá funcionando pero no será compatible con futuros módulos. Esto significa que deberías y eventualmente tendrás que actualizar tus variables de inventario de Ansible para especificar ansible_network_os=aoscx y variables adicionales, así como instalar el paquete de Python pyaoscx usando pip de Python 3, todas las playbooks seguirán siendo las mismas:
pip3 install pyaoscx
El Rol de Ansible para AOS-CX determinará automáticamente si tienes pyaoscx instalado y utilizará ese método cuando ansible_network_os esté configurado como aoscx. Si está configurado como httpapi, seguirá utilizando el método de implementación anterior.

Ejemplos de Inventarios:

Solo Módulos de API REST:

INI
aoscx_1 ansible_host=10.0.0.1 ansible_user=admin ansible_password=password ansible_network_os=aoscx ansible_connection=aoscx ansible_aoscx_validate_certs=False ansible_aoscx_use_proxy=False
YAML
all:
  hosts:
    aoscx_1:
      ansible_host: 10.0.0.1
      ansible_user: admin
      ansible_password: password
      ansible_network_os: aoscx
      ansible_connection: aoscx  # Conexión de API REST a través del método pyaoscx
      ansible_aoscx_validate_certs: False
      ansible_aoscx_use_proxy: False
      ansible_acx_no_proxy: True

Módulos de API REST Legado:

INI
aoscx_1 ansible_host=10.0.0.1 ansible_user=admin ansible_password=password ansible_network_os=aoscx ansible_connection=httpapi ansible_httpapi_validate_certs=False ansible_httpapi_use_ssl=True ansible_acx_no_proxy=True
YAML
all:
  hosts:
    aoscx_1:
      ansible_host: 10.0.0.1
      ansible_user: admin
      ansible_password: password
      ansible_network_os: aoscx
      ansible_connection: httpapi  # Método de conexión de API REST
      ansible_httpapi_validate_certs: False
      ansible_httpapi_use_ssl: True
      ansible_acx_no_proxy: True

Solo Módulos SSH/CLI:

INI
aoscx_1 ansible_host=10.0.0.1 ansible_user=admin ansible_password=password ansible_network_os=aoscx ansible_connection=network_cli
YAML
all:
  hosts:
    aoscx_1:
      ansible_host: 10.0.0.1
      ansible_user: admin
      ansible_password: password
      ansible_network_os: aoscx
      ansible_connection: network_cli  # Método de conexión SSH

Ejemplo de Playbooks

Incluyendo el Rol

Si el rol se instaló a través de Galaxy, añade arubanetworks.aoscx_role a tu lista de roles:

- hosts: all
  roles:
    - role: arubanetworks.aoscx_role
  vars:
    ansible_python_interpreter: /usr/bin/python3
  gather_facts: False     
  tasks:
  - name: Crear la interfaz L3 1/1/3
    aoscx_l3_interface:
      interface: 1/1/3
      description: Uplink_Interface
      ipv4: ['10.20.1.3/24']
      ipv6: ['2001:db8::1234/64']

Usando Tanto Módulos de API REST como SSH/CLI en un Host

Para usar tanto módulos de la API REST como módulos SSH/CLI en el mismo host, debes crear diferentes plays para que cada play use únicamente módulos de API REST o solo módulos SSH/CLI. Un play no puede mezclar llamadas a módulos de API REST y SSH/CLI. En cada play, ansible_connection debe tener el valor apropiado de acuerdo a los módulos utilizados. Si el play utiliza módulos de API REST, el valor debe ser aoscx. Si el play utiliza módulos SSH/CLI, el valor debe ser network_cli.

Un enfoque recomendado para usar con éxito ambos tipos de módulos para un host es el siguiente:

  1. Configura las variables del host de manera que Ansible se conecte al host usando la API REST, como se observa arriba.
  2. En el playbook, en cada play donde se utilicen los módulos SSH/CLI, establece el ansible_connection como network_cli.

El inventario debería verse algo así:

all:
  hosts:
    aoscx_1:
      ansible_host: 10.0.0.1
      ansible_user: admin
      ansible_password: password
      ansible_network_os: aoscx
      ansible_connection: aoscx  # Método de conexión de API REST
      ansible_httpapi_validate_certs: False
      ansible_httpapi_use_ssl: True
      ansible_acx_no_proxy: True

y el playbook de la siguiente manera (observa cómo el segundo play, que utiliza el módulo SSH/CLI aoscx_command, establece el valor de ansible_connection de manera correspondiente):

- hosts: all
  roles: 
    - role: arubanetworks.aoscx_role
  vars:
     ansible_python_interpreter: /usr/bin/python3
  gather_facts: False     
  tasks:
  - name: Agregar o actualizar banner
    aoscx_banner:
      banner_type: banner
      banner: "¡Hola!"

- hosts: all
  roles: 
    - role: arubanetworks.aoscx_role
  vars:
    ansible_connection: network_cli
  gather_facts: False    
  tasks:
    - name: Ejecutar show run en el switch
      aoscx_command:
        commands: ['show run']

Contribución

En Aruba Networks estamos dedicados a garantizar la calidad de nuestros productos, así que si encuentras algún problema, por favor abre un ticket en nuestro Github y nos aseguraremos de responder rápidamente.

Para más oportunidades de contribución, sigue nuestras pautas descritas en nuestro CONTRIBUTING.md

Licencia

Apache 2.0

Información del Autor

  • Madhusudan Pranav Venugopal (@madhusudan-pranav-venugopal)
  • Yang Liu (@yliu-aruba)
  • Tiffany Chiapuzio-Wong (@tchiapuziowong)
  • Derek Wang (@derekwangHPEAruba)
  • Daniel Alvarado Bonilla (@daniel-alvarado)
Acerca del proyecto

Ansible modules for configuring AOS-CX switches. (github repo - https://github.com/aruba/aoscx-ansible-role)

Instalar
ansible-galaxy install arubanetworks.aoscx_role
Licencia
Unknown
Descargas
97.4k