Configuración de StyleBook

Expresiones

Una de las funciones más potentes de un StyleBook es el uso de expresiones. Puede utilizar expresiones StyleBooks en varios casos para calcular valores dinámicos. El ejemplo siguiente es 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 denominado appnamey lo concatena con la cadena -mon.

Nota:

StyleBook admite el uso de palabras clave reservadas al definir parámetros y expresiones en una definición de StyleBook. Las palabras clave reservadas son - andfalsein, not, true, y or.

Se admiten los siguientes tipos de expresiones:

Expresiones aritméticas

  • Adición (+)
  • Resta (-)
  • 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 se muestra como 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 Desigualdad: $parameters.name != "default"
  • 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 de la manera opuesta.

  • 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 donde las cadenas se convierten en números (usando la función int () incorporada) y los números se convierten en cadenas (usando str () función incorporada). Del mismo modo, se puede convertir tcp-port a un número (mediante la función incorporada int()) y se puede convertir una dirección IP en una cadena (mediante la función incorporada str()).

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

  • Ante un operador: spacetab, comma, (, ), [, ]

  • Después de un operador: space, tab, (, [

Por ejemplo:

  • abc + def

  • 100 % 10

  • 10 > 9

  • $item in $parameters.some-list

Expresiones Splat

Una expresión splat [*] proporciona una forma más sencilla de recuperar un determinado atributo de una lista compleja para todas las iteraciones. Ahora puede incluir expresiones splat en una definición de StyleBook.

Sintaxis:

list[*].attribute
<!--NeedCopy-->

Esta expresión recorre en iteración todos los elementos de la lista especificada a su izquierda y devuelve el valor del atributo especificado a su derecha.

Cuando quiera recuperar una dirección IP o un nombre de host de cada servidor virtual de la lista, puede utilizar las siguientes expresiones de splat:

Ejemplo 1:

$parameters.server-members[*].hostname
<!--NeedCopy-->

Esta expresión devuelve una lista de nombres de host de todos los miembros del servidor.

Ejemplo 2:

$parameters.server-members[\*].sub-domains[\*].name
<!--NeedCopy-->

Esta expresión devuelve una lista de todos los nombres de los subdominios de cada miembro del servidor.

Estas expresiones siempre devuelven la lista del tipo de elemento situado más a la derecha.

Expresiones de cadena literales

Puede utilizar cadenas literales cuando los caracteres especiales de una cadena tienen que tomar su forma literal. Estas cadenas pueden contener caracteres de escape, barra invertida, comillas, paréntesis, espacios en blanco, corchetes, etc. En las cadenas literales, se omite la interpretación habitual de los personajes especiales. Todos los caracteres de la cadena se conservan en su forma literal.

En StyleBooks, puede incluir expresiones de directivas de Citrix ADC en su forma literal mediante cadenas literales. Las expresiones de directiva suelen contener caracteres especiales. Sin cadenas literales, tiene que escapar de los caracteres especiales dividiendo cadenas en subcadenas.

Para crear una cadena literal, encapsula una cadena entre caracteres especiales de la siguiente manera:

~{string}~
<!--NeedCopy-->

Puede utilizar cadenas literales en las expresiones StyleBook.

Nota

No utilice la secuencia de caracteres }~ en una cadena de entrada porque esta secuencia indica el final de una cadena literal.

Ejemplo:

 ~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~
<!--NeedCopy-->

Para obtener más información, consulte Permitir caracteres especiales con su forma literal en StyleBooks.

Expresiones de destino

En una definición de StyleBook, puede utilizar la $current-target expresión para hacer referencia a la instancia ADC de destino actual. Para referirse específicamente a una dirección IP de la instancia ADC de destino, utilice esta expresión de la siguiente manera:

$current-target.ip
<!--NeedCopy-->

Ejemplo:

components:
 -
  name: lb-comp
  type: ns::lbvserver
  properties:
    name: $current-target.ip + "-lbvserver"
<!--NeedCopy-->

En este ejemplo, el nombre de la lbvserver utiliza la dirección IP de la instancia ADC de destino.

Validación de tipo de expresión

El motor StyleBook ahora permite una comprobación de tipo más eficaz durante el tiempo de compilación, es decir, las expresiones utilizadas al escribir el StyleBook se validan durante la importación de un 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) y así sucesivamente se validan para su existencia y tipos.

Ejemplo de comprobaciones de tipo:

En el ejemplo siguiente, el tipo esperado de propiedad port de lbvserver StyleBook es tcp-port. En Citrix ADM, las validaciones de tipos se producen en el momento de la compilación (hora de la importación). El compilador encuentra esa cadena y no tcp-port son tipos compatibles y, por lo tanto, el compilador StyleBook muestra un error y no puede importar o migrar un StyleBook.


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

Para compilar correctamente este StyleBook, declare lo siguiente como un número en el compilador:

port: 80

Ejemplo de marcado de expresiones no válidas:

Al importar un StyleBook a Citrix ADM, el compilador identifica las expresiones no válidas y las marca. Como resultado, el StyleBook no puede importar a Citrix ADM.

En el siguiente ejemplo, la expresión asignada a la propiedad de nombre del componente lb-sg-binding-comp es: $components.lbvserver-comp.properties.lbvservername. Sin embargo, no hay ninguna propiedad llamada lbvservername en el componente lbvserver-comp.

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

Entificación implícita de tipos de datos

Cuando se utilizan expresiones de StyleBook para diferentes tipos de datos, el motor de StyleBook ahora coloca implícitamente la salida en un tipo de datos apropiado. La conversión implícita de tipos de datos admite operaciones binarias y asignaciones de valores.

Ejemplos de operaciones binarias:

  • Al agregar (+) dos variables de tipo string y number, se establece el tipo de datos de salida en string.

$parameters.appname + '_' + $parameters.app_instance_num

  • Al agregar (+) dos variables de tipo string y ipaddress, se establece el tipo de datos de salida en string.

$parameters.appname + '_' + $parameters.instance_ip

  • Al agregar (+) dos variables de tipo ipaddress y number, se establece el tipo de datos de salida en ipaddress.

$parameters.instance_ip + $parameters.number

  • Al restar (-) dos variables del tipo ipaddress y number, se establece el tipo de datos de salida en ipaddress.

$parameters.instance_ip - $parameters.number

  • Al multiplicar (*) dos variables de tipo string y number, se establece el tipo de datos de salida en string.

$parameters.dummy_str * $parameters.count

Ejemplos de asignaciones de valores:

  • Si se define una variable como tipo de datos string, el valor asignado se convierte en el tipo de datos definido.

name: $parameters.port * 3

  • Si se define una variable como el tipo de datos portnumber, el valor asignado se convierte en el tipo de datos portnumber con excepciones.

port: $index + $parameters.lower_limit

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 thetest-lbs componente
$components.test-lbs[0].properties.p1 Hace referencia a la propiedad p1 del primer elemento del componente test-lbs
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname Hace referencia a la propiedad servicegroupname del segundo elemento del servicegroups componente, que es una salida del primer elemento del lbcomps componente
Expresiones