Expresiones

Una de las funciones más potentes de StyleBook es el uso de expresiones. Puede utilizar expresiones StyleBooks en varios escenarios para calcular valores dinámicos. El siguiente ejemplo muestra una expresión para concatenar un valor de parámetro con una cadena literal.

Ejemplo:

$parameters.appname + "-mon"

Esta expresión recupera el parámetro llamado appname y lo concatena con la cadena “-mon”.

Se admiten los siguientes tipos de expresiones:

Expresiones aritméticas

  • Adición (+)
  • Sustracción (-)
  • Multiplicación (*)
  • División (/)
  • Módulo (%)

Ejemplos:

  • Agregar dos números: $parameters.a + $parameters.b
  • Multiplicando dos números: $parámetros.a * 10
  • Encontrar el resto después de la división de un número por otro:

15% 10 resultados en 5

Expresiones de cadena

  • Concatenar dos cadenas (+)

Ejemplo:

Concatenar dos cadenas: Str (“app-“) + $parameters.appname

Expresiones de lista

Fusiona dos listas (+)

Ejemplo:

  • Concatenar dos listas: $parameters.external-servers + $parameters.internal-servers

  • Si $parameters.ports-1 es[80, 81]y $parameters.port-2 es[81, 82], entonces $parameters.ports-1 + $parameters.ports-2 resulta como una lista[80, 81, 81, 82]

Expresiones Relacionales

  • ==: Prueba si dos operandos son iguales y devuelve verdadero si son iguales, de lo contrario devuelve falso.

  • ! =: Comprueba si dos operandos son diferentes y devuelve verdadero si son diferentes, de lo contrario devuelve falso.

  • : Devuelve verdadero si el primer operando es mayor que el segundo operando, de lo contrario devuelve falso.

  • =: Devuelve true si el primer operando es mayor o igual que el segundo operando, de lo contrario devuelve false.

  • <: Devuelve verdadero si el primer operando es menor que el segundo operando, de lo contrario devuelve falso.

  • <=: Devuelve true si el primer operando es menor o igual que el segundo operando, de lo contrario devuelve false.

Ejemplo:

  • Uso del operador Igualdad: $parameters.name = = “abcd”
  • Uso del operador de desigualdad: $parameters.name! = “predeterminado”
  • Ejemplos para otros operadores relacionales
    • 10 > 9
    • 10 >= 10
    • 0 < 9
    • 10 <= 9
    • 10 == 10
    • 10 != 1

Expresiones lógicas (booleanas)

  • y: El operador lógico ‘y’. Si ambos operandos son verdaderos, el resultado es verdadero, de lo contrario es falso.

  • o: El operador lógico ‘o’. Si uno de los operandos es verdadero, el resultado es verdadero, de lo contrario es falso.

  • no: El operador unario. Si el operando es verdadero, el resultado es falso y viceversa.

  • in: Comprueba si el primer argumento es una subcadena del segundo argumento

  • in: Comprueba si un elemento es parte de una lista

Nota

Puede escribir expresiones de conversión donde las cadenas se pueden convertir en números y los números se pueden convertir en cadenas. Del mismo modo, un tcp-port se puede convertir a un número, y una dirección IP se puede convertir en una cadena.

Debe utilizar un delimitador antes y después de cualquier operador. Puede utilizar los siguientes delimitadores:

  • Antes de un operador: Espacio, tabulación, coma, (, ), [, ]

  • Después de un operador: Espacio, ficha, (, [

  • Por ejemplo:

  • abc + def

  • 100 % 10

  • 10 > 9

Validación de tipo de expresión

El motor StyleBook ahora permite una comprobación de tipos más fuerte durante el tiempo de compilación, es decir, las expresiones utilizadas durante la escritura del StyleBook se validan durante la importación de StyleBook mismo en lugar de al crear el paquete de configuración.

Todas las referencias a parámetros, sustituciones, componentes, propiedades de componentes, salidas de componentes, variables definidas por el usuario (repeat-item, repeat-index, argumentos a funciones de sustitución), etc., se validan por su existencia y tipos.

Ejemplo de comprobaciones de tipo:

En el siguiente ejemplo, el tipo esperado de propiedad port de lbvserver StyleBook es tcp-port. En versiones anteriores de Citrix Application Delivery Management (ADM), el compilador StyleBook calculó el valor como una cadena y StyleBook se importó y ejecutó. Ahora, las validaciones de tipos ocurren en tiempo de compilación (tiempo de importación). El compilador encuentra que string y tcp-port no son tipos compatibles y, por lo tanto, el compilador StyleBook genera un error y falla la importación o migración del StyleBook.

componentes:

name: lbvserver-comp

type: ns::lbvserver

properties:

  name: mylb

  ipv46: 10.102.190.15

  port: str("80")

  servicetype: HTTP

Ahora debe declarar esto como un número para que el compilador compile correctamente este StyleBook.

port: 80

Ejemplo de marcado de expresiones no válidas:

En versiones anteriores, cuando se asignó una expresión no válida a un nombre de propiedad, el compilador no detectó expresiones no válidas y permitió que los StyleBooks se importaran en Citrix ADM. Ahora, si este StyleBook se importa a Citrix ADM, el compilador identificará dichas expresiones no válidas y las marcará. Como resultado, el StyleBook no se importará a Citrix ADM.

En este ejemplo, la expresión asignada a la propiedad name en el componente lb-sg-binding-comp es: $components.lbvserver-comp.properties.lbvservername. Sin embargo, no hay ninguna propiedad llamada lbvservername en el componente lbvserver-comp. En versiones anteriores de Citrix ADM, el compilador habría permitido esta expresión y la habría importado correctamente. El error real ocurriría cuando un usuario quiere crear un paquete de configuración usando este StyleBook. Sin embargo, ahora, este tipo de error se identifica durante la importación y el StyleBook no se importa a Citrix ADM. Debe corregir manualmente dichos errores e importar los StyleBooks.

componentes:

name: lbvserver-comp

type: ns::lbvserver

properties:

  name: mylb

  ipv46: 10.102.190.15

  port: 80

  servicetype: HTTP

name: sg-comp

type: ns::servicegroup

properties:

  servicegroupname: mysg

  servicetype: HTTP

name: lb-sg-binding-comp

type: ns::lbvserver\_servicegroup\_binding

condition: $parameters.create-binding

properties:

  name: $components.lbvserver-comp.properties.lbvservername

  servicegroupname: $components.sg-comp.properties.servicegroupname

Listas de indización

Los elementos de una lista se pueden acceder ahora indexándolos directamente:

   
Expresión Descripción
$components.test-lbs[0] Hace referencia al primer elemento del componente test-lbs
$components.test-lbs[0].properties.p1 Hace referencia a la propiedad p1 del primer elemento en el componente test-lbs
$components.lbcomps [0].outputs.servicegroups [1].properties.servicegroupname Hace referencia a la propiedad servicegroupname del segundo elemento del componente servicegroups, que es una salida del primer elemento del componente lbcomps