juniper.junos
Colección de Ansible de Juniper para Junos
Acerca de
Juniper Networks admite Ansible para gestionar dispositivos que ejecutan el sistema operativo Junos (Junos OS y Junos Evolved). Esta colección se encuentra en el sitio web de Ansible Galaxy bajo la colección juniper.device.
La colección juniper.device
incluye un conjunto de módulos de Ansible que realizan tareas operativas y de configuración específicas en dispositivos que ejecutan Junos OS.
Estas tareas incluyen: instalar y actualizar Junos OS, aprovisionar nuevos dispositivos Junos en la red, cargar cambios de configuración,
recuperar información y reiniciar, reiniciar o apagar dispositivos gestionados. Por favor, consulte la
sección INSTALACIÓN para obtener instrucciones sobre cómo instalar esta colección.
Dos Conjuntos de Módulos de Ansible para dispositivos Junos
Desde la versión de Ansible >= 2.1, Ansible también incluye
módulos principales para Junos. Los módulos de Junos incluidos
en el núcleo de Ansible tienen nombres que comienzan con el prefijo junos_
. Los módulos de Junos incluidos en esta colección Juniper.device
tienen nombres que comienzan con los tipos de módulos. Estos dos conjuntos de módulos de Junos pueden coexistir en la misma
máquina de control de Ansible, y un playbook de Ansible puede invocar un módulo de cualquiera (o ambos) conjuntos. Juniper Networks recomienda
usar los módulos de la colección juniper.device
al escribir nuevos playbooks que gestionen dispositivos Junos.
Resumen de Módulos
Esta colección juniper.device
incluye los siguientes módulos:
- command — Ejecutar uno o más comandos CLI en un dispositivo Junos.
- config — Manipular la configuración de un dispositivo Junos.
- facts — Recuperar datos de un dispositivo Junos.
- file_copy - Copiar archivos de y hacia un dispositivo Junos.
- jsnapy — Ejecutar pruebas JSNAPy en un dispositivo Junos.
- ping — Ejecutar ping desde un dispositivo Junos.
- pmtud — Realizar descubrimiento de MTU de ruta desde un dispositivo Junos a un destino.
- rpc — Ejecutar uno o más RPCs de NETCONF en un dispositivo Junos.
- software — Instalar software en un dispositivo Junos.
- srx_cluster — Agregar o eliminar configuración de clúster de chasis SRX.
- system — Iniciar acciones operativas en el sistema Junos.
- table — Recuperar datos de un dispositivo Junos utilizando una tabla/vista de PyEZ.
Requisitos de Versión de PyEZ
Para la colección de Ansible juniper.device
, necesitaremos instalar junos-eznc versión 2.6.0 o superior.
Resumen de Plugins
Además de los módulos listados anteriormente, hay un callback_plugin
llamado jsnapy
disponible para el módulo jsnapy.
El callback_plugin
jsnapy
ayuda a imprimir en la pantalla información adicional sobre las pruebas fallidas de jsnapy.
Para cada prueba fallida, se imprimirá un registro después del RECAP del playbook, como se muestra en este ejemplo:
RECAP DE PLAY ******************************************************
qfx10002-01 : ok=3 changed=0 unreachable=0 failed=1
qfx10002-02 : ok=3 changed=0 unreachable=0 failed=1
qfx5100-01 : ok=1 changed=0 unreachable=0 failed=1
Resultados de JSNAPy para: qfx10002-01 ***********************************
Valor de 'peer-state' no es 'is-equal' en '//bgp-information/bgp-peer' con {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}
Valor de 'peer-state' no es 'is-equal' en '//bgp-information/bgp-peer' con {"peer-as": "60021", "peer-state": "Idle", "peer-address": "192.168.0.1"}
Valor de 'oper-status' no es 'is-equal' en '//interface-information/physical-interface[normalize-space(admin-status)='up' and logical-interface/address-family/address-family-name ]' con {"oper-status": "down", "name": "et-0/0/18"}
Resultados de JSNAPy para: qfx10002-02 ***********************************
Valor de 'peer-state' no es 'is-equal' en '//bgp-information/bgp-peer' con {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}
Los plugins de callback no están activados por defecto. Deben añadirse manualmente al archivo de configuración de Ansible bajo la sección [defaults]
usando la variable callback_whitelist
. Específicamente, estas líneas
deben añadirse al archivo de configuración de Ansible para permitir el plugin de callback jsnapy:
[defaults]
callback_whitelist = jsnapy
DOCUMENTACIÓN
Documentación oficial de Juniper (información detallada, incluyendo ejemplos)
Documentación de estilo de Ansible
INSTALACIÓN
Debes tener instaladas las DEPENDENCIAS en tu sistema. Revisa requirements.txt para ver las dependencias.
AVISOS
MacOS Mojave y versiones más recientes
En MacOS Mojave y versiones más recientes (>=10.14), las claves ssh creadas con el sistema ssh-keygen
se crean utilizando el formato de clave 'OPENSSH', incluso al especificar -t rsa
durante la creación. Esto afecta directamente el uso de claves ssh, particularmente al usar ssh_private_key_file
. Para crear/convertir/verificar claves, sigue estos pasos:
- Crear una nueva clave RSA:
ssh-keygen -m PEM -t rsa -b 4096
- Verificar claves existentes:
head -n1 ~/.ssh/some_private_key
Las claves RSA serán-----BEGIN RSA PRIVATE KEY-----
y las claves OPENSSH serán-----BEGIN OPENSSH PRIVATE KEY-----
- Convertir una clave OPENSSH a una clave RSA:
ssh-keygen -p -m PEM -f ~/.ssh/some_key
Colección de Ansible Galaxy
Puedes usar el comando ansible-galaxy install para instalar la última
versión de la colección juniper.device
.
sudo ansible-galaxy collection install juniper.device
También puedes usar el comando ansible-galaxy install para instalar la última versión de desarrollo de las colecciones junos directamente desde GitHub.
sudo ansible-galaxy collection install git+https://github.com/Juniper/ansible-junos-stdlib.git#/ansible_collections/juniper/device
Para más información visita - https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#specifying-the-location-to-search-for-collections
Clonar desde Git
Para pruebas, puedes git clone
este repositorio y ejecutar el script env-setup
en el directorio del repositorio:
user@ansible-junos-stdlib> source env-setup
Esto establecerá tu variable $ANSIBLE_LIBRARY
a la ubicación del repositorio y la ruta de la biblioteca Ansible instalada. Por ejemplo:
$ echo $ANSIBLE_LIBRARY /home/jeremy/Ansible/ansible-junos-stdlib/library:/usr/share/ansible
Docker
Para ejecutar esto como un contenedor Docker, que incluye JSNAPy y PyEZ, simplemente descárgalo desde el hub de Docker y ejecútalo. Lo siguiente descargará la última imagen y la ejecutará en un shell interactivo ash.
docker run -it --rm juniper/pyez-ansible
Sin embargo, probablemente querrás montar un directorio del host (quizás el directorio que contiene tus playbooks y archivos asociados). Lo siguiente montará el directorio de trabajo actual y comenzará el shell ash.
docker run -it --rm -v $PWD:/project juniper/pyez-ansible
También puedes usar el contenedor como ejecutable para ejecutar tus playbooks. Supongamos que tenemos una estructura típica de playbook como a continuación:
ejemplo
|playbook.yml
|hosts
|-vars
|-templates
|-scripts
Podemos movernos al directorio de ejemplo y ejecutar el playbook con el siguiente comando:
cd ejemplo/ docker run -it --rm -v $PWD:/playbooks juniper/pyez-ansible ansible-playbook -i hosts playbook.yml
Puedes pasar cualquier cadena de comando válida después del nombre del contenedor y se pasará a Bash para su ejecución.
Puede que hayas notado que el comando base es casi siempre el mismo. También podemos usar un alias para ahorrar algunos toques de teclado.
alias pb-ansible="docker run -it --rm -v $PWD:/project juniper/pyez-ansible ansible-playbook" pb-ansible -i hosts playbook.yml
Extender el contenedor con paquetes adicionales
Es posible instalar paquetes del sistema (Alpine), paquetes de Python (a través de pip) y colecciones de Ansible al instante de crear el contenedor. Esto se puede hacer pasando variables de entorno o montando archivos.
Paquetes del sistema
Variable de entorno: $APK
Montaje enlazado: /extras/apk.txt
Formato de archivo: lista de paquetes válidos de Alpine, uno por línea
Ejemplos:
Como una variable de entorno, donde el archivo que contiene la lista de paquetes está en el directorio actual.
docker run -it --rm -v $PWD:/project -e APK="apk.txt" juniper/pyez-ansible
Como un montaje enlazado.
docker run -it --rm -v $PWD/apk.txt:/extras/apk.txt juniper/pyez-ansible
Paquetes de Python
Variable de entorno: $REQ
Montaje enlazado: /extras/requirements.txt
Formato de archivo: archivo de requisitos de pip
Ejemplos:
docker run -it --rm -v $PWD:/project -e REQ="requirements.txt" juniper/pyez-ansible
Como un montaje enlazado.
docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.txt juniper/pyez-ansible
Paquetes de Ansible
Variable de entorno: $ROLES
Montaje enlazado: /extras/requirements.yml
Formato de archivo: archivo de requisitos de Ansible
NOTA: Esto funciona para colecciones así como para roles.
Ejemplos:
docker run -it --rm -v $PWD:/project -e REQ="requirements.yml" juniper/pyez-ansible
Como un montaje enlazado.
docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.yml juniper/pyez-ansible
Ejemplo de Playbook
Este ejemplo describe cómo usar Ansible para instalar o actualizar la imagen de software en un dispositivo que ejecuta Junos OS.
---
- name: Instalar Junos OS
hosts: dc1
connection: local
gather_facts: false
vars:
wait_time: 3600
pkg_dir: /var/tmp/junos-install
os_version: 14.1R1.10
os_package: jinstall-14.1R1.10-domestic-signed.tgz
log_dir: /var/log/ansible
tasks:
- name: Verificando conectividad NETCONF
ansible.builtin.wait_for:
host: "{{ inventory_hostname }}"
port: 830
timeout: 5
- name: Instalar paquete de Junos OS
juniper.device.software:
reboot: true
version: "{{ os_version }}"
package: "{{ pkg_dir }}/{{ os_package }}"
logfile: "{{ log_dir }}/software.log"
register: sw
notify:
- Esperar reinicio
handlers:
- name: Esperar reinicio
ansible.builtin.wait_for:
host: "{{ inventory_hostname }}"
port: 830
timeout: "{{ wait_time }}"
when: not sw.check_mode
DEPENDENCIAS
Estos módulos requieren que lo siguiente esté instalado en la máquina de control de Ansible:
- Python >= 3.8
- Ansible 2.9 o posterior
- Junos py-junos-eznc 2.6.0 o posterior
- jxmlease 1.0.1 o posterior
- xmltodict 0.13.0 o posterior
- jsnapy 1.3.7 o posterior
LICENCIA
Apache 2.0
SOPORTE
El soporte para esta colección juniper.device
es proporcionado por la comunidad y Juniper Networks. Si tienes un
problema con un módulo en la colección juniper.device
, puedes:
- Abrir un problema en GitHub.
- Publicar una pregunta en nuestro Grupo de Google
- Enviar un correo electrónico a jnpr-community-netdev@juniper.net
- Abrir un Caso JTAC
El soporte para los módulos de Junos incluidos en el núcleo de Ansible es proporcionado por Ansible. Si tienes un problema con un módulo del núcleo de Ansible, debes abrir un problema en GitHub contra el proyecto de Ansible.
COLABORADORES
Juniper Networks contribuye activamente a y mantiene este repositorio. Por favor, contacta a jnpr-community-netdev@juniper.net para cualquier consulta.
Contribuidores: Stephen Steiner, Dinesh Babu, Chidanand Pujar
Antiguos Contribuidores:
Stacy W Smith, Jeremy Schulman, Rick Sherman, Damien Garros, David Gethings, Nitin Kumar, Rahul Kumar
ansible-galaxy install juniper.junos