Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Utiliser Ansible pour installer des logiciels sur les équipements Junos

Utilisez les modules Ansible de Juniper Networks pour installer des logiciels sur les équipements Junos.

Utiliser Ansible pour installer des logiciels

Juniper Networks fournit un module Ansible qui vous permet d’installer ou de mettre à niveau l’image logicielle sur un équipement Junos. Le tableau 1 présente le module.

Tableau 1 : module logiciel

Ensemble de contenu

Nom du module

juniper.device collection

software

Les sections suivantes expliquent comment spécifier l’emplacement de l’image logicielle ainsi que le processus et les options généraux d’installation du logiciel lors de l’utilisation du module Ansible pour installer des packages logiciels sur des équipements Junos. Ils expliquent également comment effectuer des scénarios de mise à niveau plus spécialisés, tels qu’une mise à niveau de l’hôte d’une machine virtuelle, une mise à niveau logicielle en service unifié (ISSU unifiée) ou une mise à niveau logicielle ininterrompue (NSSU) sur les appareils qui prennent en charge ces fonctionnalités.

Comment spécifier l’emplacement de l’image logicielle

Lorsque vous utilisez le juniper.device.software module pour installer des logiciels sur des équipements Junos, vous pouvez télécharger le package logiciel sur le nœud de contrôle Ansible, et le module, par défaut, copie le package sur l’équipement cible avant d’effectuer l’installation. Pour les environnements Virtual Chassis mixtes, les packages logiciels doivent résider sur le nœud de contrôle Ansible. Pour les équipements autonomes ou les environnements Virtual Chassis non mixtes, vous pouvez également demander au module d’installer une image logicielle qui réside déjà sur le périphérique Junos cible ou qui réside à une URL accessible à partir de l’équipement cible.

Le Tableau 2 décrit les arguments de module que vous devez définir en fonction de l’emplacement du progiciel. Le module doit toujours inclure l’argument local_package, pkg_setou remote_package . La no_copy valeur par défaut est false, qui indique au module de copier le progiciel à partir de l’emplacement spécifié sur le nœud de contrôle Ansible vers l’équipement cible.

Tableau 2 : arguments de module pour l’emplacement du progiciel

Emplacement du progiciel

no_copy Paramètre

local_package ou pkg_set Paramètre

remote_package Paramètre

nœud de contrôle Ansible

Omettre ou définir sur false

Pour les équipements autonomes ou les environnements Virtual Chassis non mixtes :

Défini local_package sur le chemin d’accès au fichier, y compris le nom de fichier, du progiciel sur le nœud de contrôle local. Les chemins d’accès aux fichiers sont relatifs au répertoire du playbook.

(Facultatif) Chemin d’accès au fichier sur l’équipement cible sur lequel le progiciel est copié. Le répertoire par défaut est /var/tmp.

S’il remote_package inclut un nom de fichier, celui-ci doit correspondre au nom de fichier spécifié dans local_package.

Pour les environnements Virtual Chassis mixtes :

Défini pkg_set sur une liste des chemins d’accès aux fichiers, y compris les noms de fichiers, d’un ou de plusieurs packages logiciels sur le nœud de contrôle local. Les chemins d’accès aux fichiers sont relatifs au répertoire du playbook.

Emplacement distant

URL du point de vue de l’équipement Junos cible à partir duquel le progiciel est installé.

Équipement cible

Se mettre à true

Chemin d’accès au fichier sur l’équipement cible sur lequel le progiciel doit déjà résider. Le répertoire par défaut est /var/tmp.

Si le progiciel se trouve sur le nœud de contrôle Ansible, incluez l’argument approprié pour votre installation :

  • local_package: permet d’installer le logiciel sur un équipement Junos autonome ou sur les membres d’un Virtual Chassis non mixte. La valeur de l’argument est une chaîne unique spécifiant le chemin absolu ou relatif vers l’image logicielle.

  • pkg_set: permet d’installer le logiciel sur les membres d’un Virtual Chassis mixte. La valeur de l’argument est une liste de chaînes qui spécifient les chemins d’accès absolus ou relatifs aux fichiers des images logicielles, sans ordre particulier, pour les différents membres de Virtual Chassis.

Par exemple:

Par défaut, lorsque vous incluez l’argument local_package or pkg_set , le module copie tous les packages logiciels du nœud de contrôle Ansible vers le répertoire /var/tmp du périphérique Junos cible (équipement individuel ou équipement principal de Virtual Chassis). Si vous souhaitez copier l’image local_package dans un autre répertoire, définissez l’argument remote_package et spécifiez le répertoire cible. Si l’argument remote_package inclut un nom de fichier, les noms de fichiers des local_package arguments et remote_package doivent être identiques, sinon le module génère une erreur.

Si le progiciel réside déjà sur l’équipement Junos cible (équipement individuel ou équipement principal Virtual Chassis), le module doit inclure l’argument no_copy: true ainsi que l’argument remote_package , qui spécifie le chemin d’accès à un progiciel existant sur l’équipement cible. S’il remote_package ne spécifie pas de répertoire, la valeur par défaut est /var/tmp.

Si le progiciel se trouve à un emplacement autre que le nœud de contrôle Ansible ou l’équipement cible, le module doit inclure l’argument remote_package et spécifier l’emplacement du progiciel. La valeur de remote_package est une URL du point de vue de l’équipement Junos cible. Pour plus d’informations sur les formats d’URL acceptables, reportez-vous à la section Format de spécification des noms de fichiers et des URL dans les commandes CLI de Junos OS.

Vue d’ensemble du processus d’installation

Pour utiliser Ansible afin d’installer un progiciel sur un équipement Junos, exécutez le software module et fournissez les arguments nécessaires. Par exemple:

Lorsque vous exécutez le software module, il effectue les opérations suivantes :

  1. Compare la version de Junos OS spécifiée dans l’argumentversion, ou dans le nom de fichier du progiciel si l’argument version est omis, à la version installée sur le périphérique géré. Si les versions installées et souhaitées sont identiques, le module ignore les étapes d’installation restantes et définit et failed sur changed false.
  2. Si le progiciel se trouve sur le noeud de contrôle Ansible et que le no_copy paramètre est omis ou défini sur false, le module effectue les opérations suivantes :
    • Calcule la somme de contrôle du ou des progiciels locaux à l’aide de l’algorithme spécifié dans l’argument checksum_algorithm . Les valeurs acceptables checksum_algorithm sont md5, sha1, et sha256. La valeur par défaut est md5. Vous pouvez également fournir une somme de contrôle dans l’argument checksum .

    • Effectue un nettoyage du stockage sur l’équipement cible afin de créer de l’espace pour le progiciel, sauf si l’argument cleanfs est défini sur false.

    • SCP ou FTP copie tous les paquets sur l’équipement cible, si les fichiers portant les mêmes noms et les mêmes sommes de contrôle ne résident pas déjà à l’emplacement cible sur l’appareil.

      Lorsque le module inclut local_package, le package est copié dans le remote_package répertoire ou, s’il remote_package n’est pas spécifié, dans le répertoire /var/tmp . Lorsque le module inclut pkg_set, les packages sont toujours copiés dans le répertoire /var/tmp de l’équipement principal de Virtual Chassis.

      Note:

      Si l’argument cleanfs est omis ou défini sur true, le module copie le progiciel sur le périphérique même s’il existait initialement à l’emplacement cible, car l’opération de nettoyage du stockage supprime le fichier existant. Si cleanfs: false est présent et que le fichier se trouve déjà à l’emplacement cible, le module ignore l’opération de copie du fichier.

    • Calcule la somme de contrôle de chaque fichier distant et la compare à la somme de contrôle du fichier local.

Une fois que le progiciel est sur l’équipement cible, qu’il y ait été téléchargé initialement ou copié par le module, le module effectue alors les opérations suivantes :

  1. Valide la configuration par rapport au nouveau package lorsque l’argument validate est défini sur true.

    Note:

    Par défaut, le software module ne valide pas le progiciel ou le bundle par rapport à la configuration existante comme condition préalable à l’ajout du progiciel. Pour vous assurer que la configuration active fonctionnera avec la nouvelle image logicielle, définissez l’argument validate sur true.

  2. Installe le package sur chaque moteur de routage, sauf s’il all_re est défini sur false.

  3. Redémarre chaque moteur de routage mis à niveau, sauf si l’argument reboot est défini sur false.

Le software module vous permet d’enregistrer la progression de l’installation en incluant l’argument logfile module. Par défaut, seuls les messages de niveau de gravité AVERTISSEMENT ou supérieur sont consignés. Pour consigner les messages de niveau de gravité INFO ou supérieur, qui est nécessaire pour consigner les messages du processus d’installation général, exécutez le playbook à l’aide de l’option -v de ligne de commande ou --verbose .

Comment spécifier des valeurs de délai d’expiration

Le juniper.device.software module effectue des opérations sur une session NETCONF. Par défaut, le délai d’expiration d’un RPC NETCONF est de 30 secondes. Au cours du processus d’installation, certaines opérations augmentent l’intervalle de délai d’expiration RPC comme suit :

  • Copie et installation du package sur l’appareil : 1 800 secondes (30 minutes)

  • Calcul de la somme de contrôle : 300 secondes (5 minutes)

  • Nettoyage du stockage : 300 secondes (5 minutes)

Dans certains cas, le processus d’installation, le calcul de la somme de contrôle ou le nettoyage du stockage peuvent dépasser ces intervalles de temps. Vous pouvez modifier la valeur du délai d’expiration de ces opérations en définissant les install_timeoutarguments , checksum_timeout, et cleanfs_timeout sur le nombre de secondes requis dans la liste des arguments du module. Par exemple:

Comment spécifier des options d’installation qui n’ont pas d’argument de module équivalent

Lorsque vous utilisez le juniper.device.software module pour installer un logiciel sur un périphérique, le module appelle le RPC approprié pour les arguments d’installation inclus. Par exemple, le module appelle le RPC pour les <request-package-add> installations standard de Junos OS, le RPC pour les <request-vmhost-package-add> mises à niveau d’hôtes de machines virtuelles, le RPC pour les <request-package-in-service-upgrade> scénarios ISSU unifiés, etc.

Le module prend en charge des arguments explicites pour de nombreuses options d’installation, par exemple, l’option validate . Le module prend également en charge l’argument kwargs , ce qui vous permet d’inclure toutes les options supplémentaires prises en charge par le RPC mais qui n’ont pas d’argument de module équivalent. L’argument kwargs utilise un dictionnaire de paires clé/valeur d’options supplémentaires prises en charge.

Pour obtenir la liste actuelle des options prises en charge par le module, consultez la documentation de référence de l’API du module. Pour obtenir la liste de toutes les options disponibles pour un RPC spécifique, reportez-vous à la documentation de la commande équivalente ou recherchez la balise request du RPC dans l’explorateur d’API XML Junos.

Note:

Vous ne devez inclure que les options d’installation prises en charge sur le périphérique Junos cible pour le RPC donné.

Dans le playbook suivant, le software module installe une nouvelle image logicielle sur les hôtes cibles. Le module inclut l’argument kwargs avec unlink: true. Cet argument, qui supprime le progiciel du répertoire après une mise à niveau réussie, équivaut à inclure l’option <unlink/> dans le <request-package-add> RPC.

Procédure de mise à niveau d’un hôte de machine virtuelle

Sur les équipements dotés de moteurs de routage avec prise en charge d’hôtes de machines virtuelles, Junos OS s’exécute en tant que machine virtuelle (VM) sur un hôte basé sur Linux (hôte de machines virtuelles). Une mise à niveau de l’hôte d’une machine virtuelle nécessite un package d’installation de l’hôte de machine virtuelle (junos-vmhost-install-x.tgz) et met à niveau le système d’exploitation hôte et les Junos OS compatibles. Dans l’interface de ligne de commande, vous effectuez la mise à niveau à l’aide de la request vmhost software add commande du mode opérationnel, qui correspond au <request-vmhost-package-add> RPC.

Le juniper.device.software module prend en charge l’argument permettant d’effectuer une mise à niveau de l’hôte d’une vmhost: true machine virtuelle. Lorsque l’argument est présent, le module effectue l’installation à l’aide du <request-vmhost-package-add> RPC.

Le playbook suivant met à niveau et redémarre Junos OS et le système d’exploitation hôte sur les périphériques spécifiés :

Comment réaliser un ISSU unifié ou une NSSU

Le juniper.device.software module prend en charge l’exécution d’une mise à niveau logicielle en service unifiée (ISSU unifiée) ou d’une mise à niveau logicielle ininterrompue (NSSU) sur les équipements qui prennent en charge la fonctionnalité et répondent aux exigences nécessaires. Pour plus d’informations sur les fonctionnalités unifiées ISSU et NSSU, reportez-vous à la documentation logicielle de votre produit.

La fonction ISSU unifié vous permet d’effectuer une mise à niveau entre deux versions différentes de Junos OS sans interruption sur le plan de contrôle et avec une interruption minimale du trafic. Pour effectuer une mise à niveau logicielle unifiée en service, le software module doit inclure l’argument issu: true . Par exemple:

La fonction NSSU vous permet de mettre à niveau le logiciel Junos OS s’exécutant sur un commutateur ou Virtual Chassis avec des moteurs de routage redondants avec une interruption minimale du trafic réseau. Pour effectuer une mise à jour logicielle ininterrompue, le software module doit inclure l’argument nssu: true . Par exemple:

Comment installer un logiciel sur un membre EX Series Virtual Chassis

En règle générale, lorsque vous mettez à niveau un Virtual Chassis EX Series non mixte, vous devez suivre le processus d’installation décrit dans Présentation du processus d’installation pour mettre à niveau l’ensemble du Virtual Chassis. Toutefois, il peut arriver que vous ayez besoin d’installer le logiciel sur des commutateurs membres spécifiques dans Virtual Chassis. À partir de la version 1.0.3 de la juniper.device collection, vous pouvez installer un package logiciel sur des commutateurs membres individuels dans un Virtual Chassis EX Series non mixte.

Pour installer un logiciel sur des membres spécifiques, incluez l’argument member_id et définissez une liste de chaînes qui spécifient les ID de membre. Le système installe le package logiciel à partir de l’équipement principal de Virtual Chassis sur les membres spécifiés.

Le guide Ansible suivant met à niveau le logiciel sur les membres 0 et 1 du Virtual Chassis EX Series :

Exemple : Utiliser Ansible pour installer des logiciels

Cet exemple utilise le module pour installer une image logicielle juniper.device.software sur un équipement Junos.

Exigences

Cet exemple utilise les composants matériels et logiciels suivants :

  • Serveur de gestion de la configuration exécutant Ansible 2.17 ou version ultérieure avec la juniper.device collection installée

  • Équipement Junos sur lequel NETCONF est activé et compte d’utilisateur configuré avec les autorisations appropriées

  • Paire de clés publique/privée SSH configurée pour l’utilisateur approprié sur le nœud de contrôle Ansible et l’équipement Junos

  • Fichier d’inventaire Ansible existant avec les hôtes requis définis

Aperçu

Cet exemple présente un playbook Ansible qui utilise le juniper.device.software module pour mettre à niveau Junos OS sur les hôtes du groupe d’inventaire spécifié. Dans cet exemple, l’image logicielle se trouve sur le nœud de contrôle Ansible et le module copie l’image sur l’équipement cible avant de l’installer. Le module ne définit pas explicitement d’argument host , il fonctionne donc sur l’hôte par défaut, qui est {{ inventory_hostname }}.

Ce playbook inclut la Check NETCONF connectivity tâche qui utilise le ansible.builtin.wait_for module pour tenter d’établir une session NETCONF avec le périphérique Junos à l’aide du port NETCONF 830 par défaut. Si le nœud de contrôle ne parvient pas à établir une session NETCONF avec un périphérique pendant l’exécution du playbook, il ignore les tâches restantes dans la lecture pour ce périphérique.

La Install Junos OS package tâche exécute le software module à condition que la vérification NETCONF ait réussi. L’argument version définit la version de Junos OS souhaitée telle qu’elle serait signalée par la show version commande sur le périphérique Junos. Lors de l’exécution du playbook, le module vérifie d’abord que la version demandée n’est pas déjà installée sur l’appareil. Si la version demandée est différente de la version actuellement installée, le module installe la version demandée.

L’argument local_package définit le chemin d’accès du progiciel Junos OS sur le nœud de contrôle Ansible. Au cours de l’installation, le module effectue une opération de nettoyage du stockage sur l’équipement cible, copie l’image logicielle dans le répertoire /var/tmp de l’appareil, vérifie la somme de contrôle du fichier, valide le nouveau logiciel par rapport à la configuration active, puis installe le logiciel sur chaque moteur de routage sur l’hôte cible. Par défaut, le software module redémarre chaque moteur de routage une fois l’installation terminée ; toutefois, cette tâche est explicitement définie reboot: true pour plus de clarté.

La tâche stocke le résultat du module dans la response variable et notifie un gestionnaire. Si l’utilisateur n’exécute pas le playbook à l’aide du mode de vérification, le wait_reboot gestionnaire tente alors d’établir une session avec l’appareil pour vérifier que l’appareil est de nouveau en ligne. La wait_time variable définit la durée pendant laquelle le noeud de contrôle tente de se reconnecter à l’équipement.

Cet exemple inclut le logfile paramètre permettant d’enregistrer la progression de l’installation. Ceci est important à des fins de débogage en cas d’échec de l’installation, ainsi que pour enregistrer les dates et heures d’installation sur les appareils. L’utilisateur qui exécute le playbook doit disposer des autorisations nécessaires pour écrire dans le fichier journal spécifié. Par défaut, seuls les messages de niveau de gravité AVERTISSEMENT ou supérieur sont consignés. Dans cet exemple, le playbook est exécuté avec la possibilité de consigner les -v messages de niveau de gravité INFO ou supérieur pour surveiller l’installation.

Configuration

Création du playbook Ansible

Pour créer un playbook qui utilise le module pour installer une image logicielle juniper.device.software sur un équipement Junos :

  1. Incluez le passe-partout pour le playbook et ce play, qui exécute les modules localement.

  2. Définissez ou importez toutes les variables nécessaires, ce qui inclut par exemple la version de Junos OS souhaitée et le chemin d’accès à la nouvelle image, entre autres.

  3. (Facultatif) Créez une tâche pour vérifier la connectivité NETCONF.

  4. Créez la tâche d’installation du package Junos OS sur le périphérique et informez le gestionnaire.

  5. (Facultatif) Créez une tâche pour imprimer la réponse du module.

  6. Créez le gestionnaire qui vérifie que l’appareil se reconnecte après le redémarrage.

    Le nom du gestionnaire doit être le même que celui référencé dans la tâche d’installation.

Résultats

Sur le nœud de contrôle Ansible, passez en revue le playbook terminé. Si le playbook n’affiche pas le code voulu, répétez les instructions de cet exemple pour corriger le playbook.

Exécuter le playbook

Pour exécuter le playbook :

  • Émettez la ansible-playbook commande sur le nœud de contrôle et indiquez le chemin d’accès au playbook ainsi que les options souhaitées.

Vérification

Vérifier l’installation

But

Vérifiez que l’installation du logiciel a réussi.

Action

La sortie du playbook doit indiquer les tâches qui ont échoué. Toutefois, vous pouvez également consulter le contenu du fichier journal défini dans le playbook pour plus de détails sur l’installation. Un exemple de sortie du fichier journal est affiché ici. Certains résultats ont été omis par souci de concision.

Signification

Le contenu du fichier journal indique que l’image a été copiée et installée avec succès sur les deux moteurs de routage de l’équipement cible.