Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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.

Tabla 1: Sintaxis común de Jinja utilizada en las plantillas de configuración

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:

  • La {%- -%} instrucción quita los caracteres de espacio en blanco de la salida.

  • Instrucción if utilizada para ejecutar un conjunto de comandos (encerrados entre las palabras clave y if endif ) cuando la condición es true.

    {% if <condition> %}
    ...
    ...
    ...
    {% endif %}
  • Las ifinstrucciones -else se utilizan para ejecutar un conjunto de comandos (encerrados entre las palabras clave y else if) cuando la condición es true y un conjunto diferente de comandos (encerrado entre las else palabras clave yendif) cuando la condición es false.

    {% if <condition> %}
    ...
    ...
    {% else %}
    ...
    ...
    {% endif %}
  • La for instrucción se utiliza para recorrer un conjunto de comandos (encerrados entre las for palabras clave y endfor ) cuando la condición es verdadera.

    {% for <condition> %}
    ...
    ..
    ...
    {% endfor %}

Punto (.)

Un punto [operador] se utiliza para hacer referencia a un atributo de una variable. En el ejemplo siguiente se muestra un for bucle en el que se pueden agregar varios prefijos:

{% for prefix in Trusted_Network_Prefix_List %}
set groups trusted‐prefix policy‐options prefix‐list re‐ssh {{prefix.Trusted_Network_Prefix_List}}
{% endfor %}
Nota:

Puede utilizar palabras clave de plantilla de configuración si habilita el modo avanzado para la plantilla de configuración.

Tabla 2: Palabras clave de 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:

  1. 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.

  2. 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:

  3. 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

  4. 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:

    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:

Para convertir la configuración de Junos OS en sintaxis Jinja:

  1. 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.

  2. 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:

  3. 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

  4. 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:

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.

La explicación del ejemplo anterior es la siguiente:

  1. En este ejemplo, agregamos una if instrucción y adjuntamos la configuración dentro de esa instrucción de la siguiente manera:

    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.

  2. A continuación, agregamos una for instrucción para habilitar la configuración de más de un conjunto de valores para las Relay_Group_Namevariables , Relay_Interface, y Relay_Zone .

    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.

  3. 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

  4. 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, y Relay_Zone, CSO representa la configuración de la siguiente manera:

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.

La explicación del ejemplo anterior es la siguiente:

  1. Utilizamos el VLAN_Id atributo del parámetro para definir los parámetros vlans de configuración de pool Junos OS y vlan-id.

  2. 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

    Esto se debe a que hemos usado el operador punto (.) para hacer referencia al atributo VLAN_Id del parámetro pool.

  3. 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:

    En el comando de configuración representado, puede ver que los parámetros vlans y vlan-id se establecen en V-120 y 120 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.

La explicación del ejemplo anterior es la siguiente:

  1. 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:

    1. El | operador (tubería) se utiliza para separar las variables de los filtros, que son funciones que modifican las variables. En este ejemplo, usamos el replace(“/”,”_”) filtro para modificar la Interface variable reemplazando los caracteres / (barra diagonal) por caracteres _ (guión bajo).

    2. 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.

    3. Finalmente, la etiqueta set se utiliza (junto con el = operador) para establecer la variable llamada pool_name a la variable concatenada.

  2. 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ón pool de configuración de Junos OS utilizando la variable pool_name que establecimos en el paso anterior.

  3. 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

    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.

  4. 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 , InterfaceCSO representa la configuración de la siguiente manera:

    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.

La explicación del ejemplo anterior es la siguiente:

  1. Probamos el parámetro NewNetwork.VLAN_Id para dos condiciones:

    1. Si el parámetro está definido (mediante la NewNetwork.VLAN_Id is defined condición)

    2. 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.

  2. 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

  3. 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:

    • 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):