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.
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 :
|
Point (.) |
Un point [opérateur] est utilisé pour référencer un attribut d’une variable. L’exemple suivant montre une {% for prefix in Trusted_Network_Prefix_List %} set groups trusted‐prefix policy‐options prefix‐list re‐ssh {{prefix.Trusted_Network_Prefix_List}} {% endfor %} |
Vous pouvez utiliser des mots-clés de modèle de configuration si vous activez le mode avancé pour le 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 :
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.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 :
set snmp trap-group {{ Trap_Group_Name }} targets {{ SNMP_Host_IP_Address }}
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
SNMP_Host_IP_Addresses Trap_Group_Name
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 :
delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set snmp trap-group CSO-Trp-Grp targets 192.0.2.100 exit set apply-groups default-domain_Juniper_Test
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 :
set forwarding-options dhcp-relay server-group DHCP-SERVER 192.0.2.50 set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group CSO-Relay-Grp1 interface ge-0/0/2.0 set security zones security-zone trust host-inbound-traffic system-services dhcp
Pour convertir la configuration de Junos OS en syntaxe Jinja :
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.
set forwarding-options dhcp-relay server-group DHCP-SERVER <Relay_IP> set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group <Relay_Group_Name> interface <Relay_Interface> set security zones security-zone <Relay_Zone> host-inbound-traffic system-services dhcp
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 :
set forwarding-options dhcp-relay server-group DHCP-SERVER {{Relay_IP}} set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group {{Relay_Group_Name}} interface {{Relay_Interface}} set security zones security-zone {{Relay_Zone}} host-inbound-traffic system-services dhcp
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
Relay_IP Relay_Interface Relay_Zone Relay_Group_Name
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 :
delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set forwarding-options dhcp-relay server-group DHCP-SERVER 192.0.2.50 set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group CSO-Relay-Grp1 interface ge-0/0/2.0 set security zones security-zone trust host-inbound-traffic system-services dhcp exit set apply-groups default-domain_Juniper_Test
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.
{%- if enable_Forwarding_Options %} set forwarding-options dhcp-relay server-group DHCP-SERVER {{RelayIP }} set forwarding-options dhcp-relay active-server-group DHCP-SERVER {% for relay in RelayOptions %} set forwarding-options dhcp-relay group {{ relay.Relay_Group_Name }} interface {{ relay.Relay_Interface }} set security zones security-zone {{ relay.Relay_Zone }} host-inbound-traffic system-services dhcp {% endfor %} {% endif %}
L’explication de l’exemple ci-dessus est la suivante :
Dans cet exemple, nous ajoutons une
if
instruction et plaçons la configuration à l’intérieur de cette instruction comme suit :{%- if enable_Forwarding_Options %} ... ... {% endif %}
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
.Ensuite, nous ajoutons une
for
instruction pour permettre la configuration de plusieurs ensembles de valeurs pour lesRelay_Group_Name
variables ,Relay_Interface
etRelay_Zone
.{% for relay in RelayOptions %} set forwarding-options dhcp-relay group {{ relay.Relay_Group_Name }} interface {{ relay.Relay_Interface }} set security zones security-zone {{ relay.Relay_Zone }} host-inbound-traffic system-services dhcp {% endfor %}
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.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
RelayIP enable_Forwarding_Options RelayOptions Relay_Interface Relay_Zone Relay_Group_Name
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_Interface
etRelay_Zone
, CSO effectue le rendu de la configuration comme suit :delete groups default-domain_BLR_SOLN_test delete apply-groups default-domain_BLR_SOLN_test edit groups default-domain_BLR_SOLN_test set forwarding-options dhcp-relay server-group DHCP-SERVER 192.0.2.50 set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group CSO-RelayGrp1 interface ge-0/0/2.0 set security zones security-zone trust host-inbound-traffic system-services dhcp set forwarding-options dhcp-relay group RelayGrp2 interface ge-1/0/2.0 set security zones security-zone untrust host-inbound-traffic system-services dhcp exit set apply-groups default-domain_BLR_SOLN_test
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.
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
L’explication de l’exemple ci-dessus est la suivante :
On utilise l’attribut
VLAN_Id
du paramètre pour définir les paramètresvlans
de configuration depool
Junos OS etvlan-id
.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
pool VLAN_Id
En effet, nous avons utilisé l’opérateur point (.) pour référencer l’attribut
VLAN_Id
du paramètrepool
.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 :delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set groups MIST vlans V-120 vlan-id 120 exit set apply-groups default-domain_Juniper_Test
Dans la commande de configuration rendue, vous pouvez voir que les paramètres
vlans
etvlan-id
sont définis respectivement surV-120
et en120
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.
{% set pool_name = Dhcp_Server_Name + '_' + Interface | replace("/", "_") %} set system services dhcp-local-server overrides process-inform pool {{pool_name}}
L’explication de l’exemple ci-dessus est la suivante :
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 :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 lereplace(“/”,”_”)
filtre pour modifier la Interface variable en remplaçant les caractères / (barre oblique) par des caractères _ (trait de soulignement).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.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.
Ensuite, la commande
set system services dhcp-local-server overrides process-inform pool {{pool_name}}
Junos OS est utilisée pour configurer l’instructionpool
de configuration Junos OS à l’aide de la variablepool_name
définie à l’étape précédente.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
Interface Dhcp_Server_Name
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.
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 ,Interface
CSO effectue le rendu de la configuration comme suit :delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set system services dhcp-local-server overrides process-inform pool LA_dhcp_srvr_ge-0_1_2 exit set apply-groups default-domain_Juniper_Test
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.
{%- if NewNetwork.VLAN_Id is defined and (NewNetwork.VLAN_Id | count) > 2 -%} set vlan-id {{NewNetwork.VLAN_Id}} {% else %} set vlans VL-{{NewNetwork.VLAN_Id}} {% endif %}
L’explication de l’exemple ci-dessus est la suivante :
Nous testons le paramètre
NewNetwork.VLAN_Id
pour deux conditions :Si le paramètre est défini (à l’aide de la
NewNetwork.VLAN_Id is defined
condition)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.
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
NewNetwork VLAN_Id
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 :delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Testset vlan-id 125 exit set apply-groups default-domain_Juniper_Test
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) :delete groups default-domain_BLR_SOLN_testtmp delete apply-groups default-domain_BLR_SOLN_testtmp edit groups default-domain_BLR_SOLN_testtmp set vlans VL-65 exit set apply-groups default-domain_BLR_SOLN_testtmp