Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Exemple : Utiliser Salt pour configurer des périphériques exécutant Junos OS

Juniper Networks prend en charge l’utilisation de Salt pour gérer les équipements exécutant Junos OS. Cet exemple utilise Salt pour configurer plusieurs périphériques exécutant Junos OS.

Exigences

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

  • Trois routeurs MX Series exécutant Junos OS avec NETCONF activé

  • Maître de sel avec les exigences suivantes :

    • Salt version 3001 ou ultérieure

    • Peut envoyer une requête ping et effectuer des opérations sur les périphériques exécutant Junos OS

Aperçu

Cet exemple définit un état Salt qui configure les sessions d’appairage BGP sur les équipements cibles exécutant Junos OS. Le Tableau 1 présente les noms d’hôte des périphériques, les ID de proxy et les fichiers spécifiques aux périphériques.

Tableau 1 : informations sur l’appareil

Nom d’hôte

Proxy ID

Fichier de configuration du proxy

(/srv/pilier)

Fichier de données BGP

(/srv/pilier/bgp)

R1

R1

r1-proxy.sls

r1.sls

R2

R2

r2-proxy.sls

r2.sls

R3

R3

r3-proxy.sls

r3.sls

L’exemple utilise les composants suivants :

  • Modèle de configuration Jinja2 : définit la configuration BGP en tant que modèle Jinja à l’aide set du format de commande. Le modèle utilise l’extension de fichier .set pour indiquer le format.

  • Pillar files : définissez les données de configuration spécifiques à l’équipement requises par le modèle Jinja2. Les données de chaque périphérique sont stockées dans un fichier séparé dans le répertoire /srv/pillar/bgp du maître Salt.

  • Fichier supérieur du pilier : mappe chaque fichier de pilier au minion proxy approprié.

  • Fichier d’état : définit l’état à appliquer aux équipements cibles. Dans ce cas, le fichier d’état utilise la junos.install_config fonction pour appliquer la configuration BGP à un périphérique.

  • Fichier supérieur d’état : mappe le fichier d’état aux périphériques sur lesquels l’état doit être appliqué.

Dans cet exemple, vous allez créer un modèle Jinja2 pour générer la configuration BGP qui est chargée et validée sur l’appareil. Le modèle substitue des variables aux données de configuration spécifiques à l’appareil afin qu’elles puissent être réutilisées selon les besoins. Le fichier de modèle est placé dans le répertoire /srv/salt/configs du maître Salt.

Vous créez ensuite des fichiers piliers distincts pour chaque appareil et définissez les données de configuration spécifiques à chaque appareil dans le fichier. Chaque fichier de pilier définit une BGP_data clé qui contient tous les paramètres variables référencés dans le modèle de configuration. Le fichier supérieur du pilier mappe chaque fichier de pilier à son serviteur proxy respectif. Le stockage des données dans des piliers garantit que chaque serviteur proxy ne peut accéder qu’aux données de cet appareil.

Le fichier d’état junos_bgp_config.sls définit un état qui utilise la junos.install_config fonction pour appliquer la configuration BGP dans le modèle. Lorsqu’elle est appelée, la fonction verrouille la base de données de configuration, charge la configuration spécifique à l’équipement cible, valide la configuration, puis déverrouille la base de données. La fonction inclut le diffs_file paramètre permettant de stocker les différences de configuration dans un fichier sur le serveur minion proxy. Le nom de fichier utilise le id grain pour générer des noms de fichiers spécifiques à l’unité pour les fichiers de sortie.

Le fichier d’état supérieur applique l’état junos_bgp_config à n’importe quel minion avec une clé de pilier avec n’importe BGP_data quelle valeur. Lorsque vous exécutez un highstate ou que vous appliquez cet état à un périphérique, Salt utilise les données du modèle et du pilier pour générer la configuration spécifique à la cible, puis appelle la junos.install_config fonction pour charger et valider la configuration sur le périphérique. Si la configuration est déjà appliquée, la junos.install_config fonction ne réapplique pas la configuration.

Une fois que vous avez configuré les périphériques, vous appliquez l’état junos_bgp_verify_peers . Cet état exécute le get-bgp-neighbor-information RPC sur chaque périphérique jusqu’à ce qu’il renvoie une peer-state valeur de Established pour chaque homologue défini dans les données de pilier de cet appareil. Cet état suppose que BGP est en cours d’exécution sur l’équipement.

Configuration

Pour configurer les appareils à l’aide de Salt, effectuez les tâches incluses dans cette section.

Définir les données du pilier

Procédure étape par étape

Pour définir les données de pilier utilisées avec le modèle Jinja2 pour générer la configuration BGP :

  1. Sur le maître Salt, créez un fichier distinct nommé /srv/pillar/bgp/hostname.sls pour chaque périphérique géré.

  2. Définissez les données de l’hôte r1 dans le fichier r1.sls .

  3. Définissez les données de l’hôte r2 dans le fichier r2.sls .

  4. Définissez les données de l’hôte r3 dans le fichier r3.sls .

  5. Dans le fichier du pilier supérieur, mappez le fichier du pilier avec les données BGP sous l’ID d’appareil approprié pour permettre à l’appareil d’accéder aux données.

  6. Actualisez les données du pilier.

Définir le modèle Jinja2

Procédure étape par étape

Pour créer le modèle Jinja2 utilisé pour générer la configuration BGP :

  1. Créez un fichier nommé /srv/salt/configs/junos-config-bgp-template.set sur le maître Salt.

  2. Ajoutez le modèle de configuration BGP au fichier et enregistrez-le.

Définition des états

Définition du fichier d’état de configuration

Pour définir le fichier d’état qui applique la configuration, procédez comme suit :

  1. Créez un fichier nommé /srv/salt/junos_bgp_config.sls sur le maître Salt.

  2. Définissez un état qui utilise la junos.install_config fonction pour appliquer la configuration BGP dans le modèle.

    Note:

    Si votre modèle n’inclut que des variables internes à Salt telles que les données de piliers, les données de grain et les fonctions, la junos.install_config fonction devra peut-être être définie template_vars: True pour afficher le modèle.

  3. Dans le fichier supérieur, définissez les cibles auxquelles s’applique l’état junos_bgp_config . Les cibles comprennent tous les appareils pour lesquels un BGP_data élément de pilier est défini.

Définition du fichier d’état de vérification BGP

Pour définir l’état qui vérifie que les homologues BPG ont un peer-state de Established:

  1. Créez un fichier nommé /srv/salt/junos_bgp_verify_peers.sls sur le maître Salt.

  2. Définissez un état qui utilise la junos.rpc fonction pour exécuter le get-bgp-neighbor-information RPC, puis vérifiez la réponse du RPC pour un peer-state de Established.

Résultats

Lorsque vous exécutez un highstate, les états du top.sls fichier sont appliqués aux équipements cibles appropriés.

Vérification

Vérification de la configuration BGP

But

Vérifiez que la session BGP est établie pour chaque adresse voisine.

Action

Appliquez l’état junos_bgp_verify_peers aux équipements cibles et examinez la sortie.

Signification

Le fichier d’état exige que le peer-state soit égal à Established pour chaque homologue. La sortie indique que cette condition est remplie pour tous les homologues de chaque appareil. Vous pouvez également utiliser la junos.cli fonction pour exécuter la show bgp summary commande sur les périphériques et examiner la sortie pour vérifier que la session BGP est établie pour chaque adresse voisine.

Dépannage

Dépannage des erreurs de chargement de configuration

Problème

Le maître Salt génère une ConfigLoadError erreur indiquant qu’il n’a pas pu charger la configuration sur l’appareil en raison d’une erreur de syntaxe.

Solution

Salt restitue la configuration de Junos OS à l’aide du modèle Jinja2 et des données de pilier définies pour cet équipement. Salt génère une erreur de syntaxe lorsque le modèle Jinja2 produit une configuration non valide. Pour corriger cette erreur, mettez à jour le modèle Jinja2 afin de corriger l’élément identifié par la bad_element clé dans le message d’erreur.