Jinja-Syntax und Beispiele für Konfigurationsvorlagen
CSO-Konfigurationsvorlagen bestehen aus drei Komponenten:
Eine Jinja-Vorlagenkonfiguration, die die Logik und die Konfiguration für die Konfigurationsvorlage enthält. (Jinja ist eine Vorlagen-Engine für Python und Sie können mehrere Jinja-Ressourcen im Web finden.)
Eine Yang-Datenmodelldatei, die die Deskriptoren für das Konfigurationsschema enthält.
Eine ViewDef-Datei (Ansichtsdefinition), bei der es sich um eine JavaScript Object Notation (JSON)-Datei handelt, die zum Angeben der GUI-Aspekte der Konfigurationsvorlage verwendet wird.
Wenn Sie den Workflow Konfigurationsvorlage hinzufügen verwenden, um eine Vorlage hinzuzufügen, geben Sie die Vorlagenkonfiguration und -logik mithilfe der Jinja-Vorlagensprache an. CSO generiert dann das Yang-Datenmodell und die ViewDef-Dateien automatisch basierend auf der von Ihnen angegebenen Vorlagenkonfiguration und -logik. Die Generierung der Yang- und ViewDef-Dateien ist für den Benutzer transparent und erfordert keinen Benutzereingriff.
Jinja-Syntax und CSO-Schlüsselwörter
In den folgenden Tabellen sind die Jinja-Syntax aufgeführt, die häufig in Konfigurationsvorlagen verwendet wird, und die Schlüsselwörter, die in Konfigurationsvorlagen verwendet werden.
Syntax |
Erklärung |
---|---|
|
Gibt eine Variable oder einen Ausdruck an, die bzw. der in der Vorlagenausgabe ausgegeben wird. Zum Beispiel: {{tenant_name}}
Anmerkung:
Bindestriche werden von der CSO-Vorlagen-Engine nicht erkannt, daher verwenden Sie Unterstriche (_) in Variablen oder Ausdrücken. |
|
Gibt einen Kommentar an, der nicht in die Vorlagenausgabe aufgenommen wird. Zum Beispiel: {# This is an example of comment in Jinja syntax #} |
|
Bezeichnet Anweisungen, die zum Erstellen bedingter Logik verwendet werden:
|
Punkt (.) |
Ein Punkt [Operator] wird verwendet, um auf ein Attribut einer Variablen zu verweisen. Das folgende Beispiel zeigt eine {% for prefix in Trusted_Network_Prefix_List %} set groups trusted‐prefix policy‐options prefix‐list re‐ssh {{prefix.Trusted_Network_Prefix_List}} {% endfor %} |
Sie können Schlüsselwörter für Konfigurationsvorlagen verwenden, wenn Sie den erweiterten Modus für die Konfigurationsvorlage aktivieren.
Schlüsselwort |
Erklärung |
---|---|
post_config |
Gibt CSO an, dass es sich bei der folgenden Variablen um einen Datentyp handelt. |
pre_config |
Gibt CSO die aktuelle Konfiguration an, die einem Gerät zugeordnet ist. Das Schlüsselwort pre_config wird verwendet, um den Wert eines Variablenfelds zu vergleichen und dann die vorhandene Konfiguration von einem Zielgerät zu ändern oder zu löschen. |
diff_config |
Gibt dem CSO an, dass die pre_config und die post_config verglichen werden sollen und dass CSO eine neue gerenderte Konfiguration erstellen und diese dann auf das Zielgerät übertragen soll. |
Beispiel 1: Konvertieren eines einzelnen Junos OS-Befehls in die Jinja-Syntax
Gehen Sie wie folgt vor, wenn Sie einen einzelnen Junos OS-Befehl zur Verwendung in einer Konfigurationsvorlage in Jinja-Syntax konvertieren möchten:
Identifizieren Sie die Variablen, die im Junos OS-Befehl konfiguriert sind.
Im Befehl
set snmp trap-group CSO-Trp-Grp targets 192.0.2.100
sind z. B. die Variablen CSO-Trp-Grp und 192.0.2.100 konfiguriert.Konvertieren Sie den Junos OS CLI-Befehl in die Jinja-Syntax, indem Sie jede Variable wie folgt in doppelte geschweifte Klammern einschließen:
{{ Variable_Name }}
.Wenn wir also in diesem Beispiel und SNMP_Host_IP_Address als Variablennamen verwendenTrap_Group_Name, lautet die Jinja-Syntax für den Befehl wie folgt:
set snmp trap-group {{ Trap_Group_Name }} targets {{ SNMP_Host_IP_Address }}
Wenn Sie diese in den Abschnitt "Vorlagenkonfiguration" des Workflows "Konfigurationsvorlage hinzufügen" einfügen, erkennt CSO die Parameter wie folgt:
Parameter
SNMP_Host_IP_Addresses Trap_Group_Name
Wenn Sie die Vorschaufunktion zum Rendern der Konfiguration verwenden (für ein OpCo mit dem Namen Juniper und eine Konfigurationsvorlage mit dem Namen Test) und dabei die im ersten Schritt angegebenen Werte verwenden, rendert CSO die Konfiguration wie folgt:
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
Beachten Sie, dass, obwohl Sie die JInja-Syntax für einen einzelnen Junos OS-Befehl angegeben haben, CSO der Konfiguration zusätzliche Befehle hinzugefügt hat. Dies liegt daran, dass CSO standardmäßig Junos OS-Gruppen zum Generieren der Konfiguration verwendet. Junos OS-Gruppen erleichtern das Anwenden und Löschen von Konfigurationen. Weitere Informationen finden Sie unter Grundlegendes zu Junos OS-Konfigurationsgruppen.
Wenn Sie keine Junos OS-Gruppen verwenden möchten, müssen Sie den erweiterten Modus in der Konfigurationsvorlage aktivieren, wenn Sie die Konfiguration in der Jinja-Syntax angeben.
Beispiel 2: Konvertieren eines Junos OS-Konfigurations-Snippets in die Jinja-Syntax
In diesem Beispiel konvertieren wir das folgende Junos OS-Konfigurations-Snippet in Jinja-Syntax zur Verwendung in einer Konfigurationsvorlage:
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
So konvertieren Sie die Junos OS-Konfiguration in die Jinja-Syntax:
Identifizieren Sie die Variablen, die in den Junos OS-Befehlen konfiguriert sind. Zur besseren Verständlichkeit sind die Variablen im folgenden Beispiel in eckige Klammern (<>) eingeschlossen.
Anmerkung:In diesem Beispiel wird DHCP-SERVER nicht als Variable betrachtet.
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
Konvertieren Sie jeden Junos OS-CLI-Befehl in Jinja-Syntax, indem Sie die Variablen identifizieren, einen Namen für jede Variable angeben und jede Variable in doppelte geschweifte Klammern einschließen. In diesem Fall lautet die Jinja-Syntax wie folgt:
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
Wenn Sie diese im Abschnitt "Vorlagenkonfiguration" des Workflows "Konfigurationsvorlage hinzufügen" einfügen, erkennt CSO die Parameter wie folgt:
Parameter
Relay_IP Relay_Interface Relay_Zone Relay_Group_Name
Wenn Sie die Vorschaufunktion verwenden, um die Konfiguration zu rendern (für ein OpCo mit dem Namen Juniper und eine Konfigurationsvorlage mit dem Namen Test), rendert CSO die Konfiguration mit den Werten für dieses Beispiel wie folgt:
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
Beispiel 3: Verwenden bedingter Logik
In diesem Beispiel, bei dem es sich um eine modifizierte Version des vorherigen Beispiels handelt, sehen wir, wie Sie bedingte Logik (if
und for
Anweisungen) in einer Konfigurationsvorlage verwenden können.
{%- 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 %}
Die Erklärung des obigen Beispiels lautet wie folgt:
In diesem Beispiel fügen wir eine
if
Anweisung hinzu und schließen die Konfiguration wie folgt in diese Anweisung ein:{%- if enable_Forwarding_Options %} ... ... {% endif %}
Dies bedeutet, dass die Konfiguration nur angewendet wird, wenn der enable_Forwarding_Options auf True festgelegt ist. Wenn enable_Forwarding_Options auf False festgelegt ist, wird keine Konfiguration angewendet.
Trinkgeld:Wenn Sie eine andere Konfiguration anwenden möchten, wenn enable_Forwarding_Options auf False festgelegt ist, können Sie die
else
Anweisung verwenden.Anschließend fügen wir eine
for
Anweisung hinzu, um die Konfiguration von mehr als einem Satz von Werten für dieRelay_Group_Name
Variablen ,Relay_Interface
undRelay_Zone
zu ermöglichen.{% 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 %}
Wenn Sie eine
for
Anweisung verwenden, werden die Variablen in der von CSO gerenderten GUI (wenn Sie die Vorschaufunktion verwenden) in der Tabelle (Raster) angezeigt. Sie können dann das Symbol Hinzufügen (+) verwenden, um der Tabelle Zeilen hinzuzufügen und bei Bedarf einen oder mehrere Wertesätze zu konfigurieren.Wenn Sie die Jinja-Befehle in den Abschnitt "Vorlagenkonfiguration" des Workflows "Konfigurationsvorlage hinzufügen" einfügen, erkennt CSO die Parameter wie folgt:
Parameter
RelayIP enable_Forwarding_Options RelayOptions Relay_Interface Relay_Zone Relay_Group_Name
Wenn Sie die Vorschaufunktion verwenden, um die Konfiguration zu rendern (für ein OpCo mit dem Namen Juniper und eine Konfigurationsvorlage mit dem Namen Test) und Werte für die Parameter angeben, einschließlich zweier Wertesätze für
Relay_Group_Name
,Relay_Interface
und , rendertRelay_Zone
CSO die Konfiguration wie folgt: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
Beispiel 4: Verwenden der Variablenersetzung
In diesem Beispiel verwenden wir eine Variable als Teil des Konfigurationsbefehls, sodass der Wert , den wir für die Variable angeben, im Befehl verwendet wird.
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
Die Erklärung des obigen Beispiels lautet wie folgt:
Wir verwenden das
VLAN_Id
Attribut despool
Parameters, um die Junos OS-Konfigurationsparametervlans
festzulegen undvlan-id
festzulegen.Wenn Sie den Jinja-Befehl
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
im Abschnitt Vorlagenkonfiguration des Workflows Konfigurationsvorlage hinzufügen einfügen, erkennt CSO die Parameter wie folgt:Parameter
pool VLAN_Id
Dies liegt daran, dass wir den Punktoperator (.) verwendet haben, um auf das Attribut
VLAN_Id
des Parameterspool
zu verweisen.Wenn Sie die Vorschaufunktion zum Rendern der Konfiguration verwenden (für ein OpCo mit dem Namen Juniper und eine Konfigurationsvorlage mit dem Namen Test) und den Wert 120 für
VLAN_Id
eingeben, rendert CSO die Konfiguration wie folgt: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
Im gerenderten Konfigurationsbefehl können Sie sehen, dass die Parameter
vlans
und auf und120
bzw. festgelegtV-120
sind, basierend auf dem Wert, den wir für den Parametervlan-id
VLAN_Id angegeben haben.
Beispiel 5: Verwenden von Filtern, Verkettungen und Festlegen von Variablen
In diesem Beispiel sehen wir uns an, wie Sie eine Variable mithilfe von Verkettung und Filtern festlegen und diese Variable dann in einem Junos OS-Konfigurationsbefehl verwenden.
{% set pool_name = Dhcp_Server_Name + '_' + Interface | replace("/", "_") %} set system services dhcp-local-server overrides process-inform pool {{pool_name}}
Die Erklärung des obigen Beispiels lautet wie folgt:
Die Jinja-Anweisung
{% set pool_name = Dhcp_Server_Name + ’_’ + Interface | replace(“/”,”_”) %}
wird verwendet, um eine Variable mit dem Namen pool_namefestzulegen, wobei zwei andere Variablen Dhcp_Server_Name Interfaceund wie folgt verwendet werden:Der
|
(Pipe-)Operator wird verwendet, um Variablen von Filtern zu trennen, bei denen es sich um Funktionen handelt, die Variablen ändern. In diesem Beispiel verwenden wir denreplace(“/”,”_”)
Filter, um die Interface Variable zu ändern, indem wir die Zeichen / (Schrägstrich) durch _-Zeichen (Unterstrich) ersetzen.Dann verwenden wir den Operator
+
, um die resultierende Zeichenfolge mit der Variablen Dhcp_Server_Namezu verketten.Anmerkung:Der Operator
+
wird in der Regel zum Hinzufügen von Zahlen verwendet, aber wenn es sich bei den Werten um Zeichenfolgen handelt, werden die Zeichenfolgen verkettet.Schließlich wird das Tag
set
(zusammen mit dem=
Operator) verwendet, um die aufgerufene pool_name Variable auf die verkettete Variable festzulegen.
Anschließend wird der Befehl
set system services dhcp-local-server overrides process-inform pool {{pool_name}}
Junos OS verwendet, um die Junos OS-Konfigurationsanweisungpool
mithilfe der Variablenpool_name
zu konfigurieren, die wir im vorherigen Schritt festgelegt haben.Wenn Sie die Jinja-Befehle in den Abschnitt "Vorlagenkonfiguration" des Workflows "Konfigurationsvorlage hinzufügen" einfügen, erkennt CSO die Parameter wie folgt:
Parameter
Interface Dhcp_Server_Name
Wie Sie sehen können, werden der Junos OS-Befehl oder die Variablen pool_name nicht angezeigt, da wir die Interface Variablen und Dhcp_Server_Name verwenden, um zur endgültigen Junos OS-Konfiguration zu gelangen.
Wenn Sie die Vorschaufunktion verwenden, um die Konfiguration zu rendern (für ein OpCo mit dem Namen Juniper und eine Konfigurationsvorlage mit dem Namen Test) und die Werte LA_dhcp_srvr für
Dhcp_Server_Name
und ge-0/1/2 für dieInterface
, rendert CSO die Konfiguration wie folgt: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
Wie in einem vorherigen Schritt erläutert, werden die Zeichen / in ge-0/1/2 zunächst durch _-Zeichen ersetzt, wodurch die Zeichenfolge in ge-0_1_2 geändert wird. Diese Zeichenfolge wird mit LA_dhcp_srvr verkettet, um die Zeichenfolge LA_dhcp_srvr_ge-0_1_2 zu erzeugen, die im Konfigurationsbefehl Junos OS verwendet wird.
Daher wird der Junos OS-Konfigurationsbefehl generiert
set system services dhcp-local-server overrides process-inform pool LA_dhcp_srvr_ge-0_1_2
.
Beispiel 6: Testen eines Werts
In diesem Beispiel sehen wir uns an, wie ein Wert getestet und Aktionen basierend auf dem Ergebnis der Testbedingungen ausgeführt werden.
{%- 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 %}
Die Erklärung des obigen Beispiels lautet wie folgt:
Wir testen den Parameter
NewNetwork.VLAN_Id
auf zwei Bedingungen:Gibt an, ob der Parameter definiert ist (mithilfe der
NewNetwork.VLAN_Id is defined
Bedingung)Gibt an, ob die Länge des Parameters größer als zwei ist (unter Verwendung der Bedingung
(NewNetwork.VLAN_Id | count) > 2
)
Weil wir das Schlüsselwort
and
verwenden:Der Konfigurationsbefehl
set vlan-id {{NewNetwork.VLAN_Id}}
wird der Konfiguration (die von CSO generiert wird) hinzugefügt, wenn beide Bedingungen erfüllt sind.Die Konfiguration
set vlans VL-{{NewNetwork.VLAN_Id}}
wird der Konfiguration hinzugefügt, wenn eine der Bedingungen false ist.
Wenn Sie die Jinja-Befehle in den Abschnitt "Vorlagenkonfiguration" des Workflows "Konfigurationsvorlage hinzufügen" einfügen, erkennt CSO die Parameter wie folgt:
Parameter
NewNetwork VLAN_Id
Wenn Sie die Vorschaufunktion zum Rendern der Konfiguration verwenden (für ein OpCo mit dem Namen Juniper und eine Konfigurationsvorlage mit dem Namen Test), und:
Geben Sie den Wert 125 für
VLAN_Id
an, CSO rendert die Konfiguration wie folgt, da beide Bedingungen erfüllt sind: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
Geben Sie den Wert 65 für
VLAN_Id
ein, CSO rendert die Konfiguration wie folgt, da eine der Bedingungen false ist (Länge des Parameters ist nicht größer als 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