juniper.junos

Estado de Documentación

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:

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:

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

Acerca del proyecto

Network build automation of Junos devices.

Instalar
ansible-galaxy install juniper.junos
Licencia
apache-2.0
Descargas
3.5M
Propietario