Application Delivery Management

Sustituciones

La sección de sustituciones se utiliza para definir nombres abreviados para expresiones complejas que se pueden utilizar en el resto del StyleBook para facilitar la lectura del StyleBook. También son útiles cuando la misma expresión o valor se repite más de una vez en el StyleBook, por ejemplo, un valor constante. El uso de un nombre de sustitución para este valor le permite actualizar solo el valor de sustitución cuando este valor necesita ser cambiado en lugar de actualizarlo en cada ubicación que aparece en el StyleBook, lo que podría ser propenso a errores.

Las sustituciones también se utilizan para definir asignaciones entre valores como se describe en ejemplos más adelante en este documento.

Cada sustitución de la lista se compone de una clave y un valor.El valor puede ser un valor simple, una expresión, una función o un mapa.

En el siguiente ejemplo, se definen dos sustituciones. El primero es “http-port” que se puede usar como taquigrafía para 8181. Al usar una sustitución, puede referirse a esto en el resto del StyleBook como $substitutions.http-port en lugar de 8181.

sustituciones:

puerto http-: 8181

Esto le permite especificar un nombre mnemónico a un número de puerto, así como definir este número de puerto en un lugar en el StyleBook, independientemente del número de veces que se use. Si quiere modificar el número de puerto a 8080, puede modificarlo en la sección de sustitución, y el cambio tendrá efecto dondequiera que se utilice el nombre mnemónico http-port. En el ejemplo siguiente se muestra cómo se utiliza una sustitución en un componente.

components:
 -
     name: my-lbvserver-comp
     type: ns::lbvserver
     properties:
          name: $parameters.name + "-lb"
          servicetype: HTTP
          ipv46: $parameters.ip
          port: \*\*$substitutions.http-port\*\*
          lbmethod: $parameters.lb-alg
<!--NeedCopy-->

Una sustitución también puede ser una expresión compleja. En el ejemplo siguiente se muestra cómo dos sustituciones utilizan expresiones.

substitutions:
  app-rule: HTTP.REQ.HEADER("X-Test-Application").EXISTS
  app-name: str("acme-") + $parameters.name + str("-app")
<!--NeedCopy-->

Una expresión de sustitución también puede utilizar expresiones de sustitución existentes como se muestra en el ejemplo siguiente.

substitutions:
  http-port: 8181
  app-name: str("acme-") + $parameters.name + str($substitutions.http-port) + str("-app")
<!--NeedCopy-->

Otra función útil de las sustituciones son los mapas, donde puede asignar claves a valores. A continuación se muestra un ejemplo de sustitución de mapas.

substitutions:
    secure-port:
        true: int("443")
        false: int("80")
    secure-protocol:
        true: SSL
        false: HTTP
<!--NeedCopy-->

En el ejemplo siguiente se muestra cómo utilizar los mapas de puerto seguro y protocolo seguro.

components:
 -
     name: my-lbvserver-comp
     type: ns::lbvserver
     properties:
          name: $parameters.name + "-lb"
          servicetype: \*\*$substitutions.secure-protocol[$parameters.is-secure]\*\*
          ipv46: $parameters.ip
          port: \*\*$substitutions.secure-port[$parameters.is-secure]\*\*
          lbmethod: $parameters.lb-alg
<!--NeedCopy-->

Esto implica que si el usuario de StyleBook especifica el valor booleano “true” para el parámetro is-secure, o selecciona la casilla de verificación correspondiente a este parámetro en la GUI de Citrix ADM, la propiedad servicetype de este componente tiene asignado el valor SSL y la propiedad port es asignado el valor 443. Sin embargo, si el usuario especifica “false” para este parámetro o desactiva la casilla de verificación correspondiente en la GUI de Citrix ADM, a la propiedad servicetype se le asigna el valor HTTP y al puerto se le asigna el valor 80.

En el ejemplo siguiente se muestra cómo utilizar sustituciones como función. Una función de sustitución puede tomar uno o más argumentos.Los argumentos deben ser de tipo simple, por ejemplo, cadena, número, dirección IP, booleano y otros tipos.

sustituciones:

form-lb-name (nombre): $name + “-lb”

En este ejemplo, definimos una función de sustitución “form-lb-name” que toma un argumento de cadena llamado “name” ** y lo utiliza para crear una cadena que sufija “-lb” a la cadena en el argumento name. Una expresión mediante esta función de sustitución se puede escribir como:

$substitutions.form-lb-name(“my”)

que devuelve “my-lb”

Considere otro ejemplo:

sustituciones:

prioridad cspol-( prioridad): 10100: 100 * $prioridad

La sustitución cspol-priority es una función que toma un argumento llamado priority y lo utiliza para calcular un valor. En el resto del StyleBook, esta sustitución se puede utilizar como se muestra en el siguiente ejemplo:

components:
  -
    name: cspolicy-binding-comp
    type: ns::csvserver_cspolicy_binding
    condition: not $parameters.is-default
    properties:
         name: $parameters.csvserver-name
         policyname: $components.cspolicy-comp.properties.policyname
         priority: $substitutions.cspol-priority($parameters.pool.priority)
<!--NeedCopy-->

La sustitución también puede estar formada por una clave y un valor. El valor puede ser un valor simple, una expresión, una función, un mapa, una lista o un diccionario.

El siguiente es un ejemplo de una sustitución llamada ‘slist’ cuyo valor es una lista:

substitutions:
  slist:
    - a
    - b
    - c
<!--NeedCopy-->

El valor de una sustitución también puede ser un diccionario de pares clave-valor como se ve en el siguiente ejemplo de una sustitución llamada ‘sdict’ a continuación:

substitutions:
  sdict:
    a: 1
    b: 2
    c: 3
<!--NeedCopy-->

Puede crear atributos más complejos combinando listas y diccionarios. Por ejemplo, una sustitución llamada “slistofdict” devuelve una lista de pares clave: Valor.

  slistofdict:
    -
      a: $parameters.cs1.lb1.port
      b: $parameters.cs1.lb2.port
    -
      a: $parameters.cs2.lb1.port
      b: $parameters.cs2.lb2.port
<!--NeedCopy-->

Pero, en el siguiente ejemplo, una sustitución “sdictoflist” devuelve un par clave-valor, donde el valor en sí es otra lista.

  sdictoflist:
    a:
      - 1
      - 2
    b:
      - 3
      - 4
<!--NeedCopy-->

En los componentes, estas sustituciones se pueden utilizar en construcciones de condición, propiedades, repetición, repetición de condición.

El siguiente ejemplo de un componente muestra cómo se puede utilizar una sustitución cuando se especifican las propiedades:

    properties:
      a: $substitutions.slist
      b: $substitutions.sdict
      c: $substitutions.slistofdict
      d: $substitutions.sdictoflist
<!--NeedCopy-->

Un caso de uso para definir una sustitución cuyo valor es una lista o un diccionario es cuando está configurando un servidor virtual de conmutación de contenido y varios servidores virtuales de equilibrio de carga. Dado que todos los servidores virtuales lb vinculados al mismo servidor virtual cs pueden tener una configuración idéntica, puede usar la lista de sustitución y el diccionario para crear esta configuración para evitar repetir esa configuración para cada servidor virtual lb.

El siguiente ejemplo muestra la sustitución y el componente en los StyleBooks cs-lb-mon para crear una configuración de servidor virtual de conmutación de contenido. Al construir las propiedades de cs-lb-mon StyleBooks, la sustitución compleja “lb-properties” especifica las propiedades de los servidores virtuales lb asociados con el servidor virtual cs. La sustitución de “lb-properties” es una función que toma el nombre, el tipo de servicio, la dirección IP virtual, el puerto y los servidores como parámetros y genera un par clave-valor como valor. En el componente “cs-pools”, asignamos el valor de esta sustitución al parámetro lb-pool para cada grupo.

substitutions:
  cs-port[]:
    true: int("80")
    false: int("443")
  lb-properties(name, servicetype, vip, port, servers):
    lb-appname: $name
    lb-service-type: $servicetype
    lb-virtual-ip: $vip
    lb-virtual-port: $port
    svc-servers: $servers
    svc-service-type: $servicetype
    monitors:
      -
        monitorname: $name
        type: PING
        interval: $parameters.monitor-interval
        interval_units: SEC
        retries: 3
components:
  -
    name: cs-pools
    type: stlb::cs-lb-mon
    description: | Updates the cs-lb-mon configuration with the different pools provided. Each pool with rule result in a dummy LB vserver, cs action, cs policy, and csvserver_cspolicy_binding configuration.
    condition: $parameters.server-pools
    repeat: $parameters.server-pools
    repeat-item: pool
    repeat-condition: $pool.rule
    repeat-index: ndx
    properties:
      appname: $parameters.appname + "-cs"
      cs-virtual-ip: $parameters.vip
      cs-virtual-port: $substitutions.cs-port($parameters.protocol == "HTTP")
      cs-service-type: $parameters.protocol
      pools:
        -
          lb-pool: $substitutions.lb-properties($pool.pool-name, "HTTP", "0.0.0.0", 0, $pool.servers)
          rule: $pool.rule
          priority: $ndx + 1
<!--NeedCopy-->

Mapa de sustitución:

Puede crear sustituciones que asignen claves a valores. Por ejemplo, considere un caso en el que quiera definir el puerto predeterminado (valor) que se utilizará para cada protocolo (clave). Para esta tarea, escriba un mapa de sustitución de la siguiente manera.

substitutions:
     port:
          HTTP: 80
          DNS: 53
          SSL: 443
<!--NeedCopy-->

En este ejemplo, HTTP se asigna a 80, DNS a 53 y SSL a 443. Para recuperar el puerto de un protocolo determinado que se da como parámetro, utilice la expresión

$substitutions.port [$parameters.protocol]

La expresión devuelve un valor basado en el protocolo especificado por el usuario.

  • Si la clave es HTTP, la expresión devuelve 80
  • Si la clave es DNS, la expresión devuelve 53
  • Si la clave es SSL, la expresión devuelve 443
  • Si la clave no está presente en el mapa, la expresión no devuelve ningún valor
Sustituciones

En este artículo