Application Delivery Management

Expresiones

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

Ejemplo:

$parameters.appname + «-mon»

Esta expresión recupera el parámetro denominado 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:

  • Sumar dos números: $parameters.a + $parameters.b
  • Multiplicar dos números: $parameters.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:

Encadenar dos cadenas: str(“app-“) + $parameters.appname

Expresiones de lista

Fusiona dos listas (+)

Ejemplo:

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

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

Expresiones relacionales

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

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

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

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

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

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

Ejemplo:

  • Uso del operador de 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

  • en: Comprueba si un elemento forma parte de una lista

Nota

Puede escribir expresiones de conversión en las que las cadenas se puedan convertir en números y los números en cadenas. Del mismo modo, un puerto TCP se puede convertir a un número y una dirección IP se puede convertir a una cadena.

Debe usar 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: space, tab, (, [

  • Por ejemplo:

  • abc + def

  • 100 % 10

  • 10 > 9

Validación de tipo de expresión

El motor StyleBook ahora permite una verificación de tipos más sólida durante el tiempo de compilación, es decir, las expresiones utilizadas al escribir el StyleBook se validan durante la importación del propio StyleBook 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 en cuanto a su existencia y tipo.

Ejemplo de comprobaciones de tipo:

En el siguiente ejemplo, el tipo esperado de propiedad de puerto de lbvserver StyleBook es tcp-port. En las versiones anteriores de Citrix Application Delivery Management (ADM), el compilador StyleBook calculaba el valor como una cadena y el StyleBook se importaba y ejecutaba. Ahora, las validaciones de tipos se realizan 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 arroja un error y no puede importar o migrar el StyleBook.


components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    properties:
      name: mylb
      ipv46: 10.102.190.15
      port: str("80")
      servicetype: HTTP

You should now declare this as a number for the compiler to successfully compile this StyleBook.

  port: 80
<!--NeedCopy-->

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 NetScaler ADM. Ahora, si este StyleBook se importa a Citrix ADM, el compilador identificará esas 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 de nombre en el componente lb-sg-binding-comp es: $components.lbvserver-comp.properties.lbvservername. Sin embargo, no hay ninguna propiedad denominada lbvservername en el componente lbvserver-comp. En versiones anteriores de NetScaler ADM, el compilador habría permitido esta expresión y la habría importado correctamente. El error real se produciría cuando un usuario quisiera crear un paquete de configuración con este StyleBook. Sin embargo, ahora, este tipo de error se identifica durante la importación y el StyleBook no se importa a NetScaler ADM. Debe corregir manualmente dichos errores e importar los StyleBooks.


components:
  -
    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
<!--NeedCopy-->

Listas de indización

Ahora se puede acceder a los elementos de una lista 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 servicegroup, que es una salida del primer elemento del componente lbcomps | |

Expresiones