Sustituciones

Last published : Oct 02, 2026
Las sustituciones se utilizan para definir nombres abreviados que pueden reemplazar expresiones complejas en el StyleBook, lo que hace que el StyleBook sea más legible.
Las sustituciones también son útiles cuando la misma expresión o valor se utiliza repetidamente en el StyleBook, por ejemplo, un valor constante. El uso de un nombre de sustitución para un parámetro le permite actualizar solo el valor de la sustitución en lugar de actualizar todas las ocurrencias del parámetro en el StyleBook, lo que podría ser propenso a errores.
Las sustituciones también se utilizan para definir asignaciones entre valores.
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. La primera es http-port que se puede usar como abreviatura de 8181. Al usar una sustitución, puede referirse a esto en el resto del StyleBook como $substitutions.http-port en lugar de 8181.
sustituciones:
http-port: 8181
Puede especificar un nombre mnemotécnico para un número de puerto y definir este número de puerto en un solo lugar del StyleBook, independientemente del número de veces que se utilice. Si desea modificar el número de puerto a 8080, puede modificarlo en la sección de sustitución, y el cambio surtirá efecto dondequiera que se utilice el nombre mnemotécnico http-port.
El siguiente ejemplo 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
Una sustitución también puede ser una expresión compleja. El siguiente ejemplo 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")
Una expresión de sustitución también puede utilizar expresiones de sustitución existentes, como se muestra en el siguiente ejemplo.
substitutions:
  http-port: 8181
  app-name: str("acme-") + $parameters.name + str($substitutions.http-port) + str("-app")
Otra característica útil de las sustituciones son los mapas, donde puede asignar claves a valores. El siguiente es un ejemplo de una sustitución de mapa.
substitutions:
    secure-port:
        true: int("443")
        false: int("80")
    secure-protocol:
        true: SSL
        false: HTTP
El siguiente ejemplo muestra cómo usar los mapas secure-port y secure-protocol.
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
Esto implica que si el usuario del 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 NetScaler ADM, a la propiedad servicetype de este componente se le asigna el valor SSL, y a la propiedad port se le asigna 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 NetScaler ADM, a servicetype se le asigna el valor de HTTP y al puerto se le asigna el valor de 80.
El siguiente ejemplo muestra cómo usar las sustituciones como una función. Una función de sustitución puede tomar uno o más argumentos. Los argumentos pueden ser de tipo simple, por ejemplo, cadena, número, dirección IP, booleano y otros tipos.
sustituciones:
form-lb-name(name): $name + "-lb"
En este ejemplo, se define una función de sustitución "form-lb-name" que toma un argumento de cadena llamado "name" **** y lo usa para crear una cadena que añade el sufijo "-lb" a la cadena en el argumento name. Una expresión que usa esta función de sustitución se escribe como:
$substitutions.form-lb-name("my")
Devuelve my-lb.
Considere otro ejemplo:
sustituciones:
cspol-priority(priority): 10100 - 100 * $priority
La sustitución cspol-priority es una función que toma un argumento llamado "priority" y lo usa para calcular un valor. En el resto del StyleBook, esta sustitución se muestra como:
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)
La sustitución también puede estar compuesta 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
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:
substitutions:
  sdict:
    a: 1
    b: 2
    c: 3
Puede crear atributos más complejos combinando las listas y los 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
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
En los componentes, estas sustituciones se pueden usar en las construcciones condition, properties, repeat y repeat-condition.
El siguiente ejemplo de un componente muestra cómo se puede usar una sustitución para especificar las propiedades:
    properties:
      a: $substitutions.slist
      b: $substitutions.sdict
      c: $substitutions.slistofdict
      d: $substitutions.sdictoflist
Un caso de uso para definir una sustitución cuyo valor es una lista o un diccionario es cuando se configura un servidor virtual de conmutación de contenido y varios servidores virtuales de equilibrio de carga. Como todos los servidores virtuales de equilibrio de carga vinculados al mismo servidor virtual de conmutación de contenido pueden tener una configuración idéntica, use una lista de sustitución y un diccionario para crear la configuración y evitar repetir la misma configuración para cada servidor virtual de equilibrio de carga.
El siguiente ejemplo muestra la sustitución y el componente en los cs-lb-mon StyleBooks para crear una configuración de servidor virtual de conmutación de contenido. Al construir las propiedades de los cs-lb-mon StyleBooks, la sustitución compleja "lb-properties" especifica las propiedades de los servidores virtuales de equilibrio de carga asociados con el servidor virtual de conmutación de contenido. La sustitución "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, puede asignar 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

Mapa de sustitución

Puede crear sustituciones que asignen claves a valores. Por ejemplo, considere un escenario en el que desea 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
En este ejemplo, HTTP se asigna a 80, DNS se asigna a 53 y SSL se asigna a 443. Para recuperar el puerto de un protocolo determinado que se proporciona como parámetro, use 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

Iterar a través de listas de sustitución

En el siguiente ejemplo, el StyleBook itera a través de una lista de sustitución llamada apps para crear un conjunto de componentes lbvserver y sus grupos de servicios y servidores vinculados correspondientes.
substitutions:
  apps:
    -
      name: lb1
      vip: 1.2.3.4
      vport: 80
      protocol: HTTP
      servers:
        -
          ip: 10.8.11.11
          port: 8080
        -
          ip: 10.8.11.12
          port: 8080
    -
      name: lb2
      vip: 1.2.3.5
      vport: 81
      protocol: HTTP
      servers:
        -
          ip: 10.9.11.28
          port: 8080
        -
          ip: 10.9.11.29
          port: 8181
components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    repeat: $substitutions.apps
    repeat-item: app
    properties:
      name: $app["name"]
      ipv46: $app["vip"]
      port: $app["vport"]
      servicetype: $app["protocol"]
    components:
      -
        name: servicegroup-comp
        type: ns::servicegroup
        properties:
          servicegroupname: $parent.properties.name + "-svg"
          servicetype: HTTP
        components:
          -
            name: servers-comp
            type: ns::server
            repeat: $app["servers"]
            repeat-item: server
            properties:
              name: $server["ip"]
              ipaddress: $server["ip"]
            components:
              -
                name: servicegroup-servicegroupmember-binding-comp
                type: ns::servicegroup_servicegroupmember_binding
                properties:
                  servicegroupname: $parent.parent.properties.servicegroupname
                  servername: $parent.properties.name
                  port: $server["port"]