Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Syntaxe Jinja et exemples de modèles de configuration

Les modèles de configuration CSO se composent de trois composants :

  • Une configuration de modèle Jinja, qui contient la logique et la configuration du modèle de configuration. (Jinja est un moteur de modèle pour Python et vous pouvez trouver plusieurs ressources Jinja sur le Web.)

  • Fichier de modèle de données Yang, qui contient les descripteurs du schéma de configuration.

  • Un fichier ViewDef (définition de vue), qui est un fichier JSON (JavaScript Object Notation) utilisé pour spécifier les aspects GUI du modèle de configuration.

Lorsque vous utilisez le flux de travail Ajouter un modèle de configuration pour ajouter un modèle, vous spécifiez la configuration et la logique du modèle à l’aide du langage de modèle Jinja. CSO génère ensuite automatiquement le modèle de données Yang et les fichiers ViewDef en fonction de la configuration et de la logique du modèle que vous avez spécifiées. La génération des fichiers Yang et ViewDef est transparente pour l’utilisateur et ne nécessite aucune intervention de l’utilisateur.

Syntaxe Jinja et mots-clés CSO

Les tableaux ci-dessous répertorient respectivement la syntaxe Jinja couramment utilisée dans les modèles de configuration et les mots-clés utilisés dans les modèles de configuration.

Tableau 1 : syntaxe Jinja commune utilisée dans les modèles de configuration

Syntaxe

Explication

{{ }}

Indique une variable ou une expression qui sera imprimée dans la sortie du modèle. Par exemple :

{{tenant_name}}
Note:

Les traits d’union ne sont pas reconnus par le moteur de modèle CSO, utilisez donc des traits de soulignement (_) dans les variables ou les expressions.

{# #}

Indique un commentaire qui ne sera pas inclus dans la sortie du modèle. Par exemple :

{# This is an example of comment in Jinja syntax #}

{% %}

Désigne les instructions utilisées pour créer une logique conditionnelle :

  • L’instruction {%- -%} supprime les espaces de la sortie.

  • Instruction if utilisée pour exécuter un ensemble de commandes (placées entre les mots-clés et if endif ) lorsque la condition est vraie.

    {% if <condition> %}
    ...
    ...
    ...
    {% endif %}
  • Les ifinstructions - sont utilisées pour exécuter un ensemble de commandes (placées entre les mots-clés et et) lorsque la condition est vraie et un jeu différent de commandes (placé entre les if else mots-cléselse et else endif) lorsque la condition est fausse.

    {% if <condition> %}
    ...
    ...
    {% else %}
    ...
    ...
    {% endif %}
  • L’instruction for est utilisée pour parcourir en boucle un ensemble de commandes (placées entre les mots-clés et for endfor ) lorsque la condition est vraie.

    {% for <condition> %}
    ...
    ..
    ...
    {% endfor %}

Point (.)

Un point [opérateur] est utilisé pour référencer un attribut d’une variable. L’exemple suivant montre une for boucle dans laquelle vous pouvez ajouter plusieurs préfixes :

{% for prefix in Trusted_Network_Prefix_List %}
set groups trusted‐prefix policy‐options prefix‐list re‐ssh {{prefix.Trusted_Network_Prefix_List}}
{% endfor %}
Note:

Vous pouvez utiliser des mots-clés de modèle de configuration si vous activez le mode avancé pour le modèle de configuration.

Tableau 2 : mots-clés du modèle de configuration

Mot-clé

Explication

post_config

Indique à CSO que la variable qui suit est un type de données.

pre_config

Indique à CSO la configuration actuelle associée à un appareil. Le mot-clé pre_config est utilisé pour comparer la valeur d’un champ de variable, puis modifier ou supprimer une configuration existante d’un équipement cible.

diff_config

Indique à CSO que la pre_config et la post_config doivent être comparées et que CSO doit créer une nouvelle configuration rendue, puis la pousser vers l’équipement cible.

Exemple 1 : conversion d’une seule commande Junos OS en syntaxe Jinja

Si vous souhaitez convertir une seule commande Junos OS en syntaxe Jinja pour l’utiliser dans un modèle de configuration :

  1. Identifiez les variables configurées dans la commande Junos OS.

    Par exemple, dans la commande set snmp trap-group CSO-Trp-Grp targets 192.0.2.100, les variables configurées sont CSO-Trp-Grp et 192.0.2.100.

  2. Convertissez la commande CLI Junos OS en syntaxe Jinja en plaçant chaque variable entre accolades doubles comme suit : {{ Variable_Name }}.

    Donc, dans cet exemple, si nous utilisons Trap_Group_Name et SNMP_Host_IP_Address comme noms de variables, la syntaxe Jinja de la commande est la suivante :

  3. Si vous collez ceci dans la section Configuration du modèle du workflow Ajouter un modèle de configuration, CSO détecte les paramètres comme suit :

    Paramètres

  4. Si vous utilisez la fonction d’aperçu pour restituer la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test), CSO effectue le rendu de la configuration comme suit à l’aide des valeurs indiquées à la première étape :

    Notez que bien que vous ayez fourni la syntaxe JInja pour une seule commande Junos OS, CSO a ajouté des commandes supplémentaires à la configuration. En effet, par défaut, CSO utilise des groupes Junos OS pour générer la configuration. Les groupes Junos OS facilitent l’application et la suppression des configurations. Pour plus d’informations, reportez-vous à Présentation des groupes de configuration Junos OS.

    Si vous ne souhaitez pas utiliser de groupes Junos OS, vous devez activer le mode avancé dans le modèle de configuration, lorsque vous spécifiez la configuration dans la syntaxe Jinja.

Exemple 2 : conversion d’un extrait de configuration Junos OS en syntaxe Jinja

Dans cet exemple, nous allons convertir l’extrait de configuration Junos OS suivant en syntaxe Jinja pour l’utiliser dans un modèle de configuration :

Pour convertir la configuration de Junos OS en syntaxe Jinja :

  1. Identifiez les variables configurées dans les commandes de Junos OS. Pour faciliter la compréhension, les variables sont placées entre crochets angulaires (<>) dans l’exemple ci-dessous.

    Note:

    Dans cet exemple, nous ne considérons pas DHCP-SERVER comme variable.

  2. Convertissez chaque commande CLI Junos OS en syntaxe Jinja en identifiant les variables, en fournissant un nom pour chaque variable et en plaçant chaque variable entre accolades doubles. Donc, dans ce cas, la syntaxe Jinja est la suivante :

  3. Lorsque vous collez ceci dans la section Configuration du modèle du workflow Ajouter un modèle de configuration, CSO détecte les paramètres comme suit :

    Paramètres

  4. Si vous utilisez la fonctionnalité d’aperçu pour afficher la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test), à l’aide des valeurs de cet exemple, CSO restitue la configuration comme suit :

Exemple 3 : utiliser la logique conditionnelle

Dans cet exemple, qui est une version modifiée de l’exemple précédent, nous allons voir comment vous pouvez utiliser la logique conditionnelle (if et for les instructions) dans un modèle de configuration.

L’explication de l’exemple ci-dessus est la suivante :

  1. Dans cet exemple, nous ajoutons une if instruction et plaçons sa configuration comme suit :

    Cela signifie que la configuration n’est appliquée que si la enable_Forwarding_Options est True. Si enable_Forwarding_Options a la valeur False, aucune configuration n’est appliquée.

    Pointe:

    Si vous souhaitez appliquer une configuration différente lorsque enable_Forwarding_Options a la valeur False, vous pouvez utiliser l’instruction else .

  2. Ensuite, nous ajoutons une for instruction pour permettre la configuration de plusieurs ensembles de valeurs pour les variables , Relay_Interfaceet Relay_Zone .Relay_Group_Name

    Lorsque vous utilisez une for instruction, l’interface graphique rendue par CSO (lorsque vous utilisez la fonction d’aperçu) affiche les variables dans la table (grille). Vous pouvez ensuite utiliser l’icône Ajouter (+) pour ajouter des lignes à la table et configurer un ou plusieurs ensembles de valeurs selon vos besoins.

  3. Lorsque vous collez les commandes Jinja dans la section Configuration du modèle du workflow Ajouter un modèle de configuration, CSO détecte les paramètres comme suit :

    Paramètres

  4. Si vous utilisez la fonctionnalité d’aperçu pour afficher la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test) et fournissez des valeurs pour les paramètres, y compris deux ensembles de valeurs pour Relay_Group_Name, et Relay_Zone, Relay_InterfaceCSO restitue la configuration comme suit :

Exemple 4 : Utiliser la substitution de variables

Dans cet exemple, nous utilisons une variable dans le cadre de la commande configuration de sorte que la valeur que nous spécifions pour la variable est utilisée dans la commande.

L’explication de l’exemple ci-dessus est la suivante :

  1. Nous utilisons l’attribut VLAN_Id pool du paramètre pour définir les paramètres vlans de configuration de Junos OS et vlan-id.

  2. Lorsque vous collez la commande set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}} Jinja dans la section Configuration du modèle du workflow Ajouter un modèle de configuration, CSO détecte les paramètres comme suit :

    Paramètres

    En effet, nous avons utilisé l’opérateur point (.) pour référencer l’attribut VLAN_Id du paramètre pool.

  3. Si vous utilisez la fonction d’aperçu pour afficher la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test) et que vous fournissez la valeur 120 pour VLAN_Id, CSO restitue la configuration comme suit :

    Dans la commande de configuration rendue, vous pouvez voir que les paramètres vlans et sont définis sur V-120 et vlan-id 120 respectivement, en fonction de la valeur que nous avons fournie pour le paramètre VLAN_Id.

Exemple 5 : utilisation de filtres, de concaténation et définition de variables

Dans cet exemple, nous allons voir comment définir une variable à l’aide de la concaténation et des filtres, puis utiliser cette variable dans une commande de configuration Junos OS.

L’explication de l’exemple ci-dessus est la suivante :

  1. L’instruction {% set pool_name = Dhcp_Server_Name + ’_’ + Interface | replace(“/”,”_”) %} Jinja est utilisée pour définir une variable appelée pool_name, à l’aide de deux autres variables Dhcp_Server_Name et Interface, comme suit :

    1. L’opérateur | (pipe) est utilisé pour séparer les variables des filtres, qui sont des fonctions qui modifient les variables. Dans cet exemple, nous utilisons le replace(“/”,”_”) filtre pour modifier la Interface variable en remplaçant les caractères / (barre oblique) par des caractères _ (trait de soulignement).

    2. Ensuite, nous utilisons l’opérateur + pour concaténer la chaîne résultante avec la variable Dhcp_Server_Name.

      Note:

      L’opérateur + est généralement utilisé pour ajouter des nombres, mais lorsque les valeurs sont des chaînes, les chaînes sont concaténées.

    3. Enfin, la balise set est utilisée (avec l’opérateur = ) pour définir la variable appelée pool_name sur la variable concaténée.

  2. Ensuite, la commande set system services dhcp-local-server overrides process-inform pool {{pool_name}} Junos OS permet de configurer l’instruction pool de configuration Junos OS à l’aide de la variable pool_name définie à l’étape précédente.

  3. Lorsque vous collez les commandes Jinja dans la section Configuration du modèle du workflow Ajouter un modèle de configuration, CSO détecte les paramètres comme suit :

    Paramètres

    Comme vous pouvez le constater, la commande Junos OS ou les variables ne s’affichent pas, car nous utilisons les pool_name Interface variables et Dhcp_Server_Name pour arriver à la configuration finale de Junos OS.

  4. Si vous utilisez la fonction d’aperçu pour restituer la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test) et que vous fournissez les valeurs LA_dhcp_srvr for Dhcp_Server_Name et ge-0/1/2 pour le Interface, CSO restitue la configuration comme suit :

    Comme expliqué dans une étape précédente, les caractères / dans ge-0/1/2 sont d’abord remplacés par des caractères _, ce qui change la chaîne en ge-0_1_2. Cette chaîne est concaténée avec LA_dhcp_srvr pour produire la chaîne LA_dhcp_srvr_ge-0_1_2, utilisée dans la commande de configuration Junos OS.

    Par conséquent, la commande de configuration Junos OS générée est set system services dhcp-local-server overrides process-inform pool LA_dhcp_srvr_ge-0_1_2.

Exemple 6 : Test d’une valeur

Dans cet exemple, nous allons voir comment tester une valeur et effectuer des actions en fonction du résultat des conditions de test.

L’explication de l’exemple ci-dessus est la suivante :

  1. Nous testons le paramètre NewNetwork.VLAN_Id pour deux conditions :

    1. Si le paramètre est défini (à l’aide de la NewNetwork.VLAN_Id is defined condition)

    2. Si la longueur du paramètre est supérieure à deux (à l’aide de la condition (NewNetwork.VLAN_Id | count) > 2)

    Parce que nous utilisons le mot-clé and:

    • La commande set vlan-id {{NewNetwork.VLAN_Id}} configuration est ajoutée à la configuration (générée par CSO) lorsque les deux conditions sont remplies.

    • La configuration est ajoutée à la configuration set vlans VL-{{NewNetwork.VLAN_Id}} lorsque l’une des conditions est fausse.

  2. Lorsque vous collez les commandes Jinja dans la section Configuration du modèle du workflow Ajouter un modèle de configuration, CSO détecte les paramètres comme suit :

    Paramètres

  3. Si vous utilisez la fonctionnalité d’aperçu pour afficher la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test), et :

    • Indiquez la valeur 125 pour VLAN_Id, CSO restitue la configuration comme suit, car les deux conditions sont remplies :

    • Indiquez la valeur 65 pour VLAN_Id, CSO rend la configuration comme suit car l’une des conditions est false (la longueur du paramètre n’est pas supérieure à 2) :