juniper.junos

État de la documentation

Collection Ansible Juniper pour Junos

À propos

Juniper Networks prend en charge Ansible pour la gestion des appareils fonctionnant sous le système d'exploitation Junos (Junos OS et Junos Evolved). Cette collection est hébergée sur le site Ansible Galaxy sous la collection juniper.device.

La collection juniper.device inclut un ensemble de modules Ansible qui effectuent des tâches opérationnelles et de configuration spécifiques sur des appareils exécutant Junos OS. Ces tâches comprennent : l'installation et la mise à niveau de Junos OS, la mise en service de nouveaux appareils Junos dans le réseau, le chargement de changements de configuration, la récupération d'informations, et le réinitialisation, le redémarrage ou l'arrêt des appareils gérés. Veuillez consulter la section INSTALLATION pour des instructions sur l'installation de cette collection.

Deux ensembles de modules Ansible pour les appareils Junos

Depuis la version Ansible >= 2.1, Ansible inclut également des modules de base pour Junos. Les modules Junos inclus dans le cœur d'Ansible ont des noms qui commencent par le préfixe junos_. Les modules Junos inclus dans cette collection juniper.device ont des noms commençant par les types de modules. Ces deux ensembles de modules Junos peuvent coexister sur la même machine de contrôle Ansible, et un playbook Ansible peut invoquer un module de l'un (ou des deux) ensembles. Juniper Networks recommande d'utiliser les modules de la collection juniper.device lors de l'écriture de nouveaux playbooks pour la gestion des appareils Junos.

Aperçu des modules

Cette collection juniper.device comprend les modules suivants :

  • command — Exécuter une ou plusieurs commandes CLI sur un appareil Junos.
  • config — Manipuler la configuration d'un appareil Junos.
  • facts — Récupérer des informations d'un appareil Junos.
  • file_copy - Copier des fichiers vers et depuis un appareil Junos.
  • jsnapy — Exécuter des tests JSNAPy sur un appareil Junos.
  • ping — Exécuter un ping depuis un appareil Junos.
  • pmtud — Effectuer la découverte MTU de chemin depuis un appareil Junos vers une destination.
  • rpc — Exécuter une ou plusieurs RPC NETCONF sur un appareil Junos.
  • software — Installer un logiciel sur un appareil Junos.
  • srx_cluster — Ajouter ou retirer une configuration de cluster de châssis SRX.
  • system — Initier des actions opérationnelles sur le système Junos.
  • table — Récupérer des données d'un appareil Junos en utilisant une table/vue PyEZ.

Exigence de version PyEZ

Pour la collection Ansible juniper.device, il est nécessaire d'installer junos-eznc version 2.6.0 ou supérieure.

Aperçu des plugins

En plus des modules énumérés ci-dessus, un plugin de rappel jsnapy est disponible pour le module jsnapy.

Le plugin de rappel jsnapy aide à afficher des informations supplémentaires à l'écran concernant les tests échoués de jsnapy. Pour chaque test échoué, un journal sera imprimé après le RECAP du playbook comme indiqué dans cet exemple :

RÉCAP DU JEU *********************************************************************
qfx10002-01                : ok=3    changé=0    inaccessible=0    échoué=1
qfx10002-02                : ok=3    changé=0    inaccessible=0    échoué=1
qfx5100-01                 : ok=1    changé=0    inaccessible=0    échoué=1

Résultats JSNAPy pour : qfx10002-01 ********************************************
La valeur de 'peer-state' n'est pas 'is-equal' à '//bgp-information/bgp-peer' avec {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}
La valeur de 'peer-state' n'est pas 'is-equal' à '//bgp-information/bgp-peer' avec {"peer-as": "60021", "peer-state": "Idle", "peer-address": "192.168.0.1"}
La valeur de 'oper-status' n'est pas 'is-equal' à '//interface-information/physical-interface[normalize-space(admin-status)='up' and logical-interface/address-family/address-family-name ]' avec {"oper-status": "down", "name": "et-0/0/18"}

Résultats JSNAPy pour : qfx10002-02 ********************************************
La valeur de 'peer-state' n'est pas 'is-equal' à '//bgp-information/bgp-peer' avec {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}

Les plugins de rappel ne sont pas activés par défaut. Ils doivent être ajoutés manuellement au fichier de configuration Ansible sous la section [defaults] en utilisant la variable callback_whitelist. Plus précisément, ces lignes doivent être ajoutées au fichier de configuration Ansible pour permettre le plugin de rappel jsnapy :

[defaults]
callback_whitelist = jsnapy

DOCUMENTATION

Documentation officielle de Juniper (informations détaillées, y compris des exemples)

Documentation de style Ansible

INSTALLATION

Vous devez avoir les DÉPENDANCES installées sur votre système. Vérifiez requirements.txt pour connaître les dépendances.

INFORMATIONS

MacOS Mojave et versions ultérieures

Dans MacOS Mojave et versions ultérieures (>=10.14), les clés ssh créées avec la commande ssh-keygen du système sont créées en utilisant le nouveau format de clé 'OPENSSH', même lors de la spécification de -t rsa lors de la création. Cela affecte directement l'utilisation des clés ssh, en particulier lors de l'utilisation de ssh_private_key_file. Pour créer/convertir/vérifier les clés, suivez ces étapes :

  • Créez une nouvelle clé RSA : ssh-keygen -m PEM -t rsa -b 4096
  • Vérifiez les clés existantes : head -n1 ~/.ssh/some_private_key Les clés RSA commenceront par -----BEGIN RSA PRIVATE KEY----- et les clés OPENSSH par -----BEGIN OPENSSH PRIVATE KEY-----
  • Convertir une clé OPENSSH en clé RSA : ssh-keygen -p -m PEM -f ~/.ssh/some_key

Collection Ansible Galaxy

Vous pouvez utiliser la commande ansible-galaxy install pour installer la dernière version de la collection juniper.device.

sudo ansible-galaxy collection install juniper.device

Vous pouvez également utiliser la commande ansible-galaxy install pour installer la dernière version de développement des collections junos directement à partir de GitHub.

sudo ansible-galaxy collection install git+https://github.com/Juniper/ansible-junos-stdlib.git#/ansible_collections/juniper/device

Pour plus d'informations, visitez - https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#specifying-the-location-to-search-for-collections

Clonage Git

Pour tester, vous pouvez git clone ce dépôt et exécuter le script env-setup dans le répertoire du dépôt :

user@ansible-junos-stdlib> source env-setup

Cela définira votre variable $ANSIBLE_LIBRARY sur l'emplacement du dépôt et le chemin de la bibliothèque Ansible installée. Par exemple :

$ echo $ANSIBLE_LIBRARY /home/jeremy/Ansible/ansible-junos-stdlib/library:/usr/share/ansible

Docker

Pour exécuter cela comme un conteneur Docker, qui inclut JSNAPy et PyEZ, il vous suffit de le tirer depuis le hub Docker et de l'exécuter. Ce qui suit tirera la dernière image et l'exécutera dans un shell interactif ash.

docker run -it --rm juniper/pyez-ansible

Cependant, vous souhaiterez probablement monter un répertoire hôte (peut-être le répertoire contenant vos playbooks et fichiers associés). Ce qui suit montera le répertoire de travail actuel et démarrera le shell ash.

docker run -it --rm -v $PWD:/project juniper/pyez-ansible

Vous pouvez également utiliser ce conteneur comme exécutable pour exécuter vos playbooks. Supposons que nous avons une structure de playbook typique comme ci-dessous :

exemple
|playbook.yml
|hosts
|-vars
|-templates
|-scripts

Nous pouvons nous déplacer vers le répertoire exemple et exécuter le playbook avec la commande suivante :

cd exemple/ docker run -it --rm -v $PWD:/playbooks juniper/pyez-ansible ansible-playbook -i hosts playbook.yml

Vous pouvez passer n'importe quelle chaîne de commande valide après le nom du conteneur et elle sera passée à Bash pour exécution.

Vous aurez peut-être remarqué que la commande de base est presque toujours la même. Nous pouvons également utiliser un alias pour gagner quelques frappes.

alias pb-ansible="docker run -it --rm -v $PWD:/project juniper/pyez-ansible ansible-playbook" pb-ansible -i hosts playbook.yml

Étendre le conteneur avec des packages supplémentaires

Il est possible d'installer des packages OS (Alpine), des packages Python (via pip) et des collections Ansible lors de l'instanciation du conteneur. Cela peut être fait en passant des variables d'environnement ou en liant des fichiers.

Packages OS

Variable d'environnement : $APK Montage lié : /extras/apk.txt Format du fichier : liste des packages Alpine valides, un par ligne Exemples :

En tant que variable d'environnement, où le fichier contenant une liste de paquets se trouve dans le répertoire actuel.

docker run -it --rm -v $PWD:/project -e APK="apk.txt" juniper/pyez-ansible

En tant que montage lié.

docker run -it --rm -v $PWD/apk.txt:/extras/apk.txt juniper/pyez-ansible

Packages Python

Variable d'environnement : $REQ Montage lié : /extras/requirements.txt Format du fichier : fichier de requirements pip

Exemples :

docker run -it --rm -v $PWD:/project -e REQ="requirements.txt" juniper/pyez-ansible

En tant que montage lié.

docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.txt juniper/pyez-ansible

Packages Ansible

Variable d'environnement : $ROLES Montage lié : /extras/requirements.yml Format du fichier : fichier de requirements Ansible

NOTE : Cela fonctionne aussi bien pour les collections que pour les rôles.

Exemples :

docker run -it --rm -v $PWD:/project -e REQ="requirements.yml" juniper/pyez-ansible

En tant que montage lié.

docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.yml juniper/pyez-ansible

Exemple de Playbook

Cet exemple décrit comment utiliser Ansible pour installer ou mettre à niveau l'image logicielle sur un appareil fonctionnant sous Junos OS.

---
- name: Installer 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: Vérifier la connectivité NETCONF
      ansible.builtin.wait_for:
        host: "{{ inventory_hostname }}"
        port: 830
        timeout: 5
    - name: Installer le paquet Junos OS
      juniper.device.software:
        reboot: true
        version: "{{ os_version }}"
        package: "{{ pkg_dir }}/{{ os_package }}"
        logfile: "{{ log_dir }}/software.log"
      register: sw
      notify:
        - Wait_reboot

  handlers:
    - name: Wait_reboot
      ansible.builtin.wait_for:
        host: "{{ inventory_hostname }}"
        port: 830
        timeout: "{{ wait_time }}"
      when: not sw.check_mode

DÉPENDANCES

Ces modules nécessitent que les éléments suivants soient installés sur la machine de contrôle Ansible :

LICENCE

Apache 2.0

SOUTIEN

Le soutien pour cette collection juniper.device est fourni par la communauté et Juniper Networks. Si vous avez un problème avec un module dans la collection juniper.device, vous pouvez :

Le soutien pour les modules Junos inclus dans le cœur Ansible est fourni par Ansible. Si vous avez un problème avec un module Ansible du noyau, vous devez ouvrir un problème Github contre le projet Ansible.

CONTRIBUTIONS

Juniper Networks contribue activement et maintient ce dépôt. Veuillez contacter [email protected] pour toute question.

Contributeurs : Stephen Steiner, Dinesh Babu, Chidanand Pujar

Anciens contributeurs :

Stacy W Smith, Jeremy Schulman, Rick Sherman, Damien Garros, David Gethings, Nitin Kumar, Rahul Kumar

À propos du projet

Network build automation of Junos devices.

Installer
ansible-galaxy install juniper.junos
Licence
apache-2.0
Téléchargements
3.5M
Propriétaire