Interpolaciones in situ
Ahora es posible reemplazar partes de una cadena utilizando una expresión StyleBook. Cuando el compilador StyleBook evalúa estas expresiones de cadena, la parte de la cadena que utiliza una expresión StyleBook se reemplazará por un valor de la expresión. Para incluir expresiones StyleBook en una cadena, usamos la siguiente notación:
"...%{...}%..."
<!--NeedCopy-->
Donde los caracteres entre»% {“y «}%» forman una expresión StyleBook. Estas expresiones se conocen como “interpolaciones in situ. “
Por ejemplo, la cadena lb-%{$parameters.appname}%-svc
es una expresión de cadena con una interpolación in situ de una expresión StyleBook. El valor de la expresión de cadena depende del valor de la expresión de interpolación. Considere que $parameters.appname está asignado con “app1”. A continuación, la expresión de cadena se evalúa como lb-app1-svc. Esto permite que los valores no se codifiquen en expresiones de cadena, sino que se evalúen en función de los valores definidos por el usuario.
Un caso práctico de interpolaciones in situ es parametrizar las expresiones de política en StyleBooks. Considere un caso en el que quiera escribir una expresión de directiva que compruebe si la dirección URL HTTP contiene una palabra específica, por ejemplo, “jpeg”.
Para ello, escriba una expresión de directiva de la siguiente manera: “HTTP.REQ.URL.CONTAINS(\“jpeg\”)”.
Ahora, si desea parametrizar el objeto en la URL HTTP, puede agregar un parámetro de cadena en el StyleBook, digamos, $parameters.url-object
. La expresión de directiva se escribe en función de este parámetro. Para hacer eso, usa la concatenación de cadenas para lograr el resultado. La expresión se vería así:
str("HTTP.REQ.URL.CONTAINS(\\"" + $parameters.url-object + "\\")")
<!--NeedCopy-->
Si $parameter.url-object
se asigna «csv», la expresión anterior se evalúa como «HTTP.REQ.URL.CONTAINS (\” csv\»)». Sin embargo, esta expresión no es fácil de leer. Para que esta parametrización sea fácil de leer y entender, puede utilizar interpolaciones in situ.
La expresión con interpolación in situ es ahora:
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
<!--NeedCopy-->
En la expresión anterior, utilizó una expresión de interpolación que agrega las comillas internas alrededor del valor de $parameters.url-object. El resultado de esta expresión es el mismo que el anterior, pero, parece más intuitivo y más cercano al resultado real.
Tipos permitidos dentro de interpolaciones
Puede utilizar expresiones que generen un valor de los siguientes tipos dentro de las interpolaciones: booleano, number, tcp-port
, ipaddress
, y string. El valor generado se transforma automáticamente en una cadena cuando las interpolaciones se reemplazan con el resultado.
Las expresiones de cadena pueden tener 0, 1 o más interpolaciones. En una interpolación secuencial, diferentes partes de la expresión de cadena se pueden reemplazar por diferentes expresiones de StyleBook. Por ejemplo, la cadena lb-% {$parameters.appname} %-% {$parameters.vip}% devuelve “lb-app1-1.1.1.1”, si $parameters.appname es “app1” y $parameters.vip es “1.1.1.1”
Las expresiones de cadena también admiten interpolaciones anidadas. Es decir, una expresión de interpolación se puede anidar dentro de otra expresión de interpolación para que el valor de una expresión pueda convertirse en una entrada a la segunda expresión.
Por ejemplo, considere una cadena «% {lb-% {$parameters.port + 1}%}%»
La cadena interna “ % {$parameters.port + 1}% “ devuelve «lb-81” si $parameters.port es 80. Aquí, esta expresión está anidada dentro de otra expresión de interpolación.
En la siguiente tabla se describen los diferentes tipos de interpolaciones con ejemplos y resultados correspondientes. El valor de los parámetros utilizados en los ejemplos es:
- $parameters.appname: “lb1”
- $parámetros.vip: «1.1.1.1»
- $parameters.n1: 1
- $parameters.n2: 3
Interpolaciones simples
Expresión | Resultado |
---|---|
lb-%{$parameters.appname}%-def |
lb-lb1-def |
Conversiones automáticas de tipos
Expresión | Resultado |
---|---|
lb-%{1}% | lb-1 |
lb-%{$parameters.vip}% | lb-1.1.1.1 |
lb-% {verdadero}% | LB-verdadero |
Interpolaciones secuenciales
Expresión | Resultado |
---|---|
% {$parameters.appname} %-% {str ($parameters.appname)}% | lb1-lb1 |
lb-%{1}%-%{2}% | lb-1-2 |
Interpolaciones anidadas
Expresión | Resultado |
---|---|
%{abc-%{$parameters.n1 + 1}%}% |
abc-2 |
str("%{abc-%{$parameters.n1}%}%-%{$parameters.n2}%") |
bc-1-3 |
quotewrap
Interpolaciones con Expresión | Resultado |
---|---|
str("%{quotewrap(abcd)}%")
str("%{quotewrap(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL")
|
"abcd
<https://"+HTTP.REQ.HOST NAME+HTTP.REQ.URL
|
Escapar caracteres en interpolaciones
Si los caracteres «% {» o «}%» forman parte de la cadena, debe proporcionar “\
» como carácter de escape para que el compilador de StyleBook no los evalúe como etiquetas de interpolación.
Ejemplo:
str("%{\%\{ + str($parameters.vip) + \}\%}%") returns "%{1.1.1.1}%" if $parameters.vip is 1.1.1.1
En la siguiente tabla se describen algunas expresiones más y sus resultados:
|Categoría|Expresión|Resultado|
|—|—|—|
|Escapar interpolaciones|str("%{str($parameters.n1) + \}\%}%")
|1}%
|
| |lb-%{str($parameters.n1) + \}\%}%
|lb-1}%
|
| | |"%{str($parameters.n1) + \\"\\}\\%\\"}%"|1}%