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
- Instala todos los requisitos de Ansible con el siguiente comando:
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
yaoscx_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 entornoANSIBLE_PERSISTENT_COMMAND_TIMEOUT
a un valor mayor. Consulta la documentación de Ansible aquí.
- Si regularmente encuentras el error
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 formatoA.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 detexto plano
ansible_password
: Contraseña para el switch en formato detexto plano
ansible_network_os
: Debe estar siempre configurado comoaoscx
ansible_connection
: Configurado comohttpapi
para usar módulos de la API REST, comonetwork_cli
para usar módulos SSH/CLI y comoaoscx
para usar módulos pyaoscxansible_httpapi_use_ssl
: (Solo requerido para módulos de la API REST) Debe ser siempreTrue
ya que AOS-CX utiliza el puerto 443 para RESTansible_httpapi_validate_certs
: (Solo requerido para módulos de la API REST) EstablecerTrue
oFalse
dependiendo de si Ansible debe intentar validar certificadosansible_acx_no_proxy
: Establecer enTrue
oFalse
según si Ansible debe omitir proxies de entorno para conectarse a AOS-CXansible_aoscx_validate_certs
: Establecer enTrue
oFalse
según si Ansible debe omitir la validación de certificados para conectarse a AOS-CX. Solo requerido cuandoansible_connection
está configurado comoaoscx
ansible_aoscx_use_proxy
: Establecer enTrue
oFalse
según si Ansible debe omitir proxies de entorno para conectarse a AOS-CX. Solo requerido cuandoansible_connection
está configurado comoaoscx
.
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:
- Configura las variables del host de manera que Ansible se conecte al host usando la API REST, como se observa arriba.
- En el playbook, en cada play donde se utilicen los módulos SSH/CLI, establece el
ansible_connection
comonetwork_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)
Ansible modules for configuring AOS-CX switches. (github repo - https://github.com/aruba/aoscx-ansible-role)
ansible-galaxy install arubanetworks.aoscx_role