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.
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 :
|
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 à 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 :
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 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 :
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 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 :
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 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 :
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 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.
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 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 :
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 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
Relay_IP Relay_Interface Relay_Zone Relay_Group_Name
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 :
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 sa configuration comme suit :{%- if enable_Forwarding_Options %} ... ... {% endif %}
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
.Ensuite, nous ajoutons une
for
instruction pour permettre la configuration de plusieurs ensembles de valeurs pour les variables ,Relay_Interface
etRelay_Zone
.Relay_Group_Name
{% 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 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.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é 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
, etRelay_Zone
,Relay_Interface
CSO restitue 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 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 :
Nous utilisons l’attribut
VLAN_Id
pool
du paramètre pour définir les paramètresvlans
de configuration de 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 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 :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
et sont définis surV-120
etvlan-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.
{% 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 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 :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 sur la variable concaténée.
Ensuite, la commande
set system services dhcp-local-server overrides process-inform pool {{pool_name}}
Junos OS permet de 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 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.
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 leInterface
, CSO restitue 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, 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.
{%- 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}}
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.
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é 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 :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
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) :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