Sintaxis de Jinja y ejemplos de plantillas de configuración
Las plantillas de configuración de CSO constan de tres componentes:
Una configuración de plantilla Jinja, que contiene la lógica y la configuración de la plantilla de configuración. (Jinja es un motor de plantillas para Python y puede encontrar varios recursos de Jinja en la Web).
Un archivo de modelo de datos Yang, que contiene los descriptores del esquema de configuración.
Un archivo ViewDef (definición de vista), que es un archivo de notación de objetos JavaScript (JSON) que se utiliza para especificar los aspectos de la GUI de la plantilla de configuración.
Cuando se usa el flujo de trabajo Agregar plantilla de configuración para agregar una plantilla, se especifica la configuración y la lógica de la plantilla mediante el lenguaje de plantillas Jinja. A continuación, CSO genera el modelo de datos Yang y los archivos ViewDef automáticamente en función de la configuración de la plantilla y la lógica especificadas. La generación de los archivos Yang y ViewDef es transparente para el usuario y no requiere ninguna intervención del usuario.
Sintaxis de Jinja y palabras clave CSO
En las tablas siguientes se enumeran la sintaxis de Jinja utilizada habitualmente en las plantillas de configuración y las palabras clave utilizadas en las plantillas de configuración, respectivamente.
Sintaxis |
Explicación |
---|---|
|
Denota una variable o expresión que se imprimirá en la salida de la plantilla. Por ejemplo: {{tenant_name}}
Nota:
El motor de plantillas de CSO no reconoce los guiones, así que use guiones bajos (_) en las variables o expresiones. |
|
Denota un comentario que no se incluirá en la salida de la plantilla. Por ejemplo: {# This is an example of comment in Jinja syntax #} |
|
Denota instrucciones que se utilizan para crear lógica condicional:
|
Punto (.) |
Un punto [operador] se utiliza para hacer referencia a un atributo de una variable. En el ejemplo siguiente se muestra un {% for prefix in Trusted_Network_Prefix_List %} set groups trusted‐prefix policy‐options prefix‐list re‐ssh {{prefix.Trusted_Network_Prefix_List}} {% endfor %} |
Puede utilizar palabras clave de plantilla de configuración si habilita el modo avanzado para la plantilla de configuración.
Palabra clave |
Explicación |
---|---|
post_config |
Indica a CSO que la variable que sigue es un tipo de datos. |
pre_config |
Indica a CSO la configuración actual asociada a un dispositivo. La palabra clave pre_config se utiliza para comparar el valor de un campo de variable y, a continuación, modificar o eliminar la configuración existente de un dispositivo de destino. |
diff_config |
Indica a CSO que se deben comparar el pre_config y el post_config y que CSO debe crear una nueva configuración renderizada y, a continuación, insertarla en el dispositivo de destino. |
Ejemplo 1: Convertir un solo comando de Junos OS a sintaxis Jinja
Si desea convertir un solo comando de Junos OS en sintaxis Jinja para usarlo en una plantilla de configuración:
Identifique las variables configuradas en el comando de Junos OS.
Por ejemplo, en el comando
set snmp trap-group CSO-Trp-Grp targets 192.0.2.100
, las variables configuradas son CSO-Trp-Grp y 192.0.2.100.Convierta el comando de la CLI de Junos OS a la sintaxis de Jinja encerrando cada variable entre llaves dobles de la siguiente manera:
{{ Variable_Name }}
.Entonces, en este ejemplo, si usamos Trap_Group_Name y SNMP_Host_IP_Address como nombres de variables, la sintaxis de Jinja para el comando es la siguiente:
set snmp trap-group {{ Trap_Group_Name }} targets {{ SNMP_Host_IP_Address }}
Si pega esto en la sección Configuración de plantilla del flujo de trabajo Agregar plantilla de configuración, CSO detecta los parámetros de la siguiente manera:
Parámetros
SNMP_Host_IP_Addresses Trap_Group_Name
Si usa la característica de vista previa para representar la configuración (para un OpCo denominado Juniper y una plantilla de configuración denominada Test) utilizando los valores indicados en el primer paso, CSO representa la configuración de la siguiente manera:
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
Tenga en cuenta que, aunque proporcionó la sintaxis JInja para un solo comando de Junos OS, CSO agregó comandos adicionales a la configuración. Esto se debe a que, de forma predeterminada, CSO utiliza grupos de Junos OS para generar la configuración. Los grupos de Junos OS facilitan la aplicación y eliminación de configuraciones. Para obtener más información, consulte Descripción de los grupos de configuración de Junos OS.
Si no desea utilizar grupos de Junos OS, debe activar el modo avanzado en la plantilla de configuración cuando especifique la configuración en la sintaxis de Jinja.
Ejemplo 2: Convertir un fragmento de configuración de Junos OS a sintaxis Jinja
En este ejemplo, convertiremos el siguiente fragmento de configuración de Junos OS en sintaxis Jinja para usarlo en una plantilla de configuración:
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
Para convertir la configuración de Junos OS en sintaxis Jinja:
Identifique las variables configuradas en los comandos de Junos OS. Para facilitar la comprensión, las variables están encerradas entre corchetes angulares (<>) en el siguiente ejemplo.
Nota:En este ejemplo, no estamos considerando DHCP-SERVER como una 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
Convierta cada comando de la CLI de Junos OS a la sintaxis de Jinja identificando las variables, proporcionando un nombre para cada variable y encerrando cada variable entre llaves dobles. Entonces, en este caso, la sintaxis de Jinja es la siguiente:
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
Cuando pega esto en la sección Configuración de plantilla del flujo de trabajo Agregar plantilla de configuración, CSO detecta los parámetros de la siguiente manera:
Parámetros
Relay_IP Relay_Interface Relay_Zone Relay_Group_Name
Si usa la característica de vista previa para representar la configuración (para un OpCo denominado Juniper y una plantilla de configuración denominada Test), utilizando los valores de este ejemplo, CSO representa la configuración de la siguiente manera:
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
Ejemplo 3: Usar lógica condicional
En este ejemplo, que es una versión modificada del ejemplo anterior, veremos cómo se puede usar la lógica condicional (if
y for
las instrucciones) en una plantilla de configuración.
{%- 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 %}
La explicación del ejemplo anterior es la siguiente:
En este ejemplo, agregamos una
if
instrucción y adjuntamos la configuración dentro de esa instrucción de la siguiente manera:{%- if enable_Forwarding_Options %} ... ... {% endif %}
Esto significa que la configuración solo se aplica si el enable_Forwarding_Options es True. Si enable_Forwarding_Options es False, no se aplica ninguna configuración.
Propina:Si desea aplicar una configuración diferente cuando enable_Forwarding_Options es False, puede utilizar la
else
instrucción.A continuación, agregamos una
for
instrucción para habilitar la configuración de más de un conjunto de valores para lasRelay_Group_Name
variables ,Relay_Interface
, yRelay_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 %}
Cuando se utiliza una
for
instrucción, la GUI representada por CSO (cuando se utiliza la función de vista previa) se muestran las variables en la tabla (cuadrícula). A continuación, puede utilizar el icono Agregar (+) para agregar filas a la tabla y configurar uno o más conjuntos de valores según sea necesario.Al pegar los comandos Jinja en la sección Configuración de plantilla del flujo de trabajo Agregar plantilla de configuración, CSO detecta los parámetros de la siguiente manera:
Parámetros
RelayIP enable_Forwarding_Options RelayOptions Relay_Interface Relay_Zone Relay_Group_Name
Si usa la característica de vista previa para representar la configuración (para un OpCo denominado Juniper y una plantilla de configuración denominada Test) y proporciona valores para los parámetros, incluidos dos conjuntos de valores para
Relay_Group_Name
,Relay_Interface
, yRelay_Zone
, CSO representa la configuración de la siguiente manera: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
Ejemplo 4: Usar sustitución de variables
En este ejemplo, usamos una variable como parte del comando de configuración, de modo que el valor que especificamos para la variable se usa en el comando.
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
La explicación del ejemplo anterior es la siguiente:
Utilizamos el
VLAN_Id
atributo del parámetro para definir los parámetrosvlans
de configuración depool
Junos OS yvlan-id
.Cuando pega el comando
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
Jinja en la sección Configuración de plantilla del flujo de trabajo Agregar plantilla de configuración, CSO detecta los parámetros de la siguiente manera:Parámetros
pool VLAN_Id
Esto se debe a que hemos usado el operador punto (.) para hacer referencia al atributo
VLAN_Id
del parámetropool
.Si usa la característica de vista previa para representar la configuración (para un OpCo denominado Juniper y una plantilla de configuración denominada Test) y proporciona el valor 120 para
VLAN_Id
, CSO representa la configuración de la siguiente manera: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
En el comando de configuración representado, puede ver que los parámetros
vlans
yvlan-id
se establecen enV-120
y120
respectivamente, según el valor que proporcionamos para el parámetro VLAN_Id.
Ejemplo 5: Usar filtros, concatenación y establecer variables
En este ejemplo, veremos cómo establecer una variable mediante concatenación y filtros, y luego usar esa variable en un comando de configuración de Junos OS.
{% set pool_name = Dhcp_Server_Name + '_' + Interface | replace("/", "_") %} set system services dhcp-local-server overrides process-inform pool {{pool_name}}
La explicación del ejemplo anterior es la siguiente:
La instrucción
{% set pool_name = Dhcp_Server_Name + ’_’ + Interface | replace(“/”,”_”) %}
Jinja se utiliza para establecer una variable denominada pool_name, utilizando otras dos variables Dhcp_Server_Name y Interface, de la siguiente manera:El
|
operador (tubería) se utiliza para separar las variables de los filtros, que son funciones que modifican las variables. En este ejemplo, usamos elreplace(“/”,”_”)
filtro para modificar la Interface variable reemplazando los caracteres / (barra diagonal) por caracteres _ (guión bajo).Luego, usamos el
+
operador para concatenar la cadena resultante con la variable Dhcp_Server_Name.Nota:El operador
+
se usa normalmente para sumar números, pero cuando los valores son cadenas, las cadenas se concatenan.Finalmente, la etiqueta
set
se utiliza (junto con el=
operador) para establecer la variable llamada pool_name a la variable concatenada.
A continuación, el comando
set system services dhcp-local-server overrides process-inform pool {{pool_name}}
Junos OS se utiliza para configurar la instrucciónpool
de configuración de Junos OS utilizando la variablepool_name
que establecimos en el paso anterior.Al pegar los comandos Jinja en la sección Configuración de plantilla del flujo de trabajo Agregar plantilla de configuración, CSO detecta los parámetros de la siguiente manera:
Parámetros
Interface Dhcp_Server_Name
Como puede ver, el comando Junos OS o las pool_name variables no se muestran porque estamos usando las Interface variables y Dhcp_Server_Name para llegar a la configuración final de Junos OS.
Si usa la característica de vista previa para representar la configuración (para un OpCo denominado Juniper y una plantilla de configuración denominada Test) y proporciona los valores LA_dhcp_srvr para
Dhcp_Server_Name
y ge-0/1/2 para ,Interface
CSO representa la configuración de la siguiente manera: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
Como se explicó en un paso anterior, los caracteres / en ge-0/1/2 se reemplazan primero por caracteres _, lo que cambia la cadena a ge-0_1_2. Esta cadena se concatena con LA_dhcp_srvr para producir la cadena LA_dhcp_srvr_ge-0_1_2, que se utiliza en el comando de configuración de Junos OS.
Por lo tanto, el comando de configuración de Junos OS generado es
set system services dhcp-local-server overrides process-inform pool LA_dhcp_srvr_ge-0_1_2
.
Ejemplo 6: Probar un valor
En este ejemplo, veremos cómo probar un valor y realizar acciones basadas en el resultado de las condiciones de prueba.
{%- 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 %}
La explicación del ejemplo anterior es la siguiente:
Probamos el parámetro
NewNetwork.VLAN_Id
para dos condiciones:Si el parámetro está definido (mediante la
NewNetwork.VLAN_Id is defined
condición)Si la longitud del parámetro es mayor que dos (mediante la condición
(NewNetwork.VLAN_Id | count) > 2
)
Porque usamos la palabra clave
and
:El comando
set vlan-id {{NewNetwork.VLAN_Id}}
de configuración se agrega a la configuración (que genera CSO) cuando se cumplen ambas condiciones.La configuración
set vlans VL-{{NewNetwork.VLAN_Id}}
se agrega a la configuración cuando alguna de las condiciones es false.
Al pegar los comandos Jinja en la sección Configuración de plantilla del flujo de trabajo Agregar plantilla de configuración, CSO detecta los parámetros de la siguiente manera:
Parámetros
NewNetwork VLAN_Id
Si utiliza la función de vista previa para representar la configuración (para un OpCo denominado Juniper y una plantilla de configuración denominada Test), y:
Proporcione el valor 125 para
VLAN_Id
, CSO representa la configuración de la siguiente manera porque se cumplen ambas condiciones: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
Proporcione el valor 65 para
VLAN_Id
, CSO representa la configuración de la siguiente manera porque una de las condiciones es false (la longitud del parámetro no es mayor que 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