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èles pour Python et vous pouvez trouver plusieurs ressources Jinja sur le Web.)

  • Un 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 de l’interface graphique du modèle de configuration.

Lorsque vous utilisez le workflow 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 #}

{% %}

Indique 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 (entre les mots-clés et if endif ) lorsque la condition est vraie.

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

    {% if <condition> %}
    ...
    ...
    {% else %}
    ...
    ...
    {% endif %}
  • L’instruction for est utilisée pour parcourir en boucle un ensemble de commandes (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 au CSO la configuration actuelle associée à un équipement. Le mot-clé pre_config permet de comparer la valeur d’un champ variable, puis de modifier ou de supprimer une configuration existante à partir d’un équipement cible.

diff_config

Indique à CSO que le pre_config et le post_config doivent être comparés et que CSO doit créer une nouvelle configuration de rendu, puis la transférer vers l’équipement cible.

Exemple 1 : convertir une seule commande Junos OS en syntaxe Jinja

Si vous souhaitez convertir une seule commande Junos OS en syntaxe Jinja à 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 comme suit : {{ Variable_Name }}.

    Ainsi, 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 fonctionnalité de préversion pour effectuer le rendu de la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test), en utilisant les valeurs indiquées à la première étape, CSO effectue le rendu de la configuration comme suit :

    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 de configurations. Pour plus d’informations, reportez-vous à la section Présentation des groupes de configuration Junos OS.

    Si vous ne souhaitez pas utiliser les 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 à 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 Junos OS. Pour faciliter la compréhension, les variables sont entourées de crochets angulaires (<>) dans l’exemple ci-dessous.

    Note:

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

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

  3. Lorsque vous le collez 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é de préversion pour effectuer le rendu de la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test), en utilisant les valeurs de cet exemple, CSO effectue le rendu de 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 la configuration à l’intérieur de cette instruction comme suit :

    Cela signifie que la configuration n’est appliquée que si l’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 Relay_Group_Namevariables , Relay_Interfaceet Relay_Zone .

    Lorsque vous utilisez une for instruction, l’interface graphique rendue par CSO (lorsque vous utilisez la fonction d’aperçu) affiche les variables dans un tableau (grille). Vous pouvez ensuite utiliser l’icône Ajouter (+) pour ajouter des lignes au tableau 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é de préversion pour effectuer le rendu de la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test) et que vous fournissez des valeurs pour les paramètres, y compris deux ensembles de valeurs pour Relay_Group_Name, Relay_Interfaceet Relay_Zone, CSO effectue le rendu de la configuration comme suit :

Exemple 4 : Utiliser la substitution de variables

Dans cet exemple, nous utilisons une variable dans le cadre de la commande de 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. On utilise l’attribut VLAN_Id du paramètre pour définir les paramètres vlans de configuration de pool 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 fonctionnalité de préversion pour effectuer le rendu de 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 effectue le rendu de la configuration comme suit :

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

Exemple 5 : Utiliser des filtres, une concaténation et définir des 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 permet de 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 à la variable concaténée.

  2. Ensuite, la commande set system services dhcp-local-server overrides process-inform pool {{pool_name}} Junos OS est utilisée pour 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 voir, la commande Junos OS ou les pool_name variables ne sont pas affichées, car nous utilisons les Interface variables et Dhcp_Server_Name pour arriver à la configuration finale de Junos OS.

  4. Si vous utilisez la fonctionnalité de préversion pour effectuer le rendu de la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test) et que vous fournissez les valeurs LA_dhcp_srvr pour Dhcp_Server_Name et ge-0/1/2 pour , InterfaceCSO effectue le rendu de 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, qui est utilisée dans la commande de configuration Junos OS.

    Par conséquent, la commande de configuration de 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}} de configuration est ajoutée à la configuration (générée par CSO) lorsque les deux conditions sont remplies.

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

  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é de préversion pour effectuer le rendu de la configuration (pour un OpCo nommé Juniper et un modèle de configuration nommé Test), et :

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

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