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"
<!--NeedCopy-->
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 (+)
- 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 en las que las cadenas se convierten en números y los números se convierten en cadenas. Del mismo modo, puede convertir
tcp-port
a un número, y una dirección IP se puede convertir en una cadena.Utilice un delimitador antes y después de cualquier operador. Puede utilizar los siguientes delimitadores:
Ante un operador:
space
tab
,comma
,(
,)
,[
,]
Después de un operador:
space
,tab
,(
,[
Por ejemplo:
abc + def
100 % 10
10 > 9
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 NetScaler 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 cualquier parte del 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-->
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 la 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 lbvserver
se construye con la dirección IP de la instancia ADC de destino.
Validación de tipo de expresión
El motor StyleBook permite una comprobación de tipos 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 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 NetScaler Application Delivery Management (ADM), las validaciones de tipo se realizan en tiempo de compilación (tiempo de 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:
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 NetScaler ADM, el compilador identifica dichas expresiones no válidas y lo marcarán. Como resultado, el StyleBook no puede importar a NetScaler 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 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. Corrija manualmente dichos errores e importe 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 servicegroupname la propiedad del segundo elemento del servicegroups componente, que es una salida del primer elemento del lbcomps componente |