juniper.junos
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 :
- Python >= 3.8
- Ansible 2.9 ou version ultérieure
- Junos py-junos-eznc 2.6.0 ou version ultérieure
- jxmlease 1.0.1 ou version ultérieure
- xmltodict 0.13.0 ou version ultérieure
- jsnapy 1.3.7 ou version ultérieure
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 :
- Ouvrir un problème GitHub.
- Poser une question sur notre Groupe Google
- Envoyer un e-mail à [email protected]
- Ouvrir un cas JTAC
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
ansible-galaxy install juniper.junos