Application Delivery Management

Substitutions

Les substitutions sont utilisées pour définir des noms abrégés qui peuvent remplacer des expressions complexes dans le StyleBook, rendant ainsi le StyleBook plus lisible.

Les substitutions sont également utiles lorsque la même expression ou la même valeur est utilisée à plusieurs reprises dans le StyleBook, par exemple une valeur constante. L’utilisation d’un nom de substitution pour un paramètre vous permet de mettre à jour uniquement la valeur de substitution au lieu de mettre à jour toutes les occurrences du paramètre dans le StyleBook, ce qui peut être sujet à des erreurs.

Les substitutions sont également utilisées pour définir des mappages entre les valeurs.

Chaque substitution dans la liste est composée d’une clé et d’une valeur. La valeur peut être une valeur simple, une expression, une fonction ou une carte.

Dans l’exemple suivant, deux substitutions sont définies. Le premier est http-port qui peut être utilisé comme un raccourci pour 8181. En utilisant une substitution, vous pouvez désigner cela dans le reste du StyleBook comme $substitutions.http-port au lieu de 8181.

substitutions :

  http-port: 8181

Vous pouvez attribuer un nom mnémotechnique à un numéro de port et définir ce numéro de port à un seul endroit du StyleBook, quel que soit le nombre de fois qu’il est utilisé. Si vous souhaitez modifier le numéro de port en 8080, vous pouvez le modifier dans la section de substitution, et la modification prend effet partout où le nom http-port mnémotechnique est utilisé.

L’exemple suivant montre comment une substitution est utilisée dans un composant.

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

Une substitution peut également être une expression complexe. L’exemple suivant montre comment deux substitutions utilisent des expressions.

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

Une expression de substitution peut également utiliser des expressions de substitution existantes, comme indiqué dans l’exemple suivant.

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

Les cartes sont une autre fonctionnalité utile des substitutions, dans lesquelles vous pouvez associer des clés à des valeurs. Voici un exemple de substitution de carte.

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

L’exemple suivant montre comment utiliser les cartes secure-port et 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
<!--NeedCopy-->

Cela implique que si l’utilisateur du StyleBook spécifie la valeur booléenne « true » au paramètre is-secure, ou sélectionne la case à cocher correspondant à ce paramètre dans l’interface graphique NetScaler ADM, la propriété servicetype de ce composant se voit attribuer la valeur SSL et la propriété port est attribuée la valeur 443. Toutefois, si l’utilisateur spécifie « false » pour ce paramètre ou désactive la case à cocher correspondante dans l’interface graphique de NetScaler ADM , servicetypese voit attribuer la valeur HTTP et le port reçoit la valeur 80.

L’exemple suivant montre comment utiliser les substitutions en tant que fonction. Une fonction de substitution peut prendre un ou plusieurs arguments. Les arguments peuvent être de type simple, par exemple chaîne, nombre, adresse IP, booléen, etc.

substitutions :

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

Dans cet exemple, une fonction de substitution « form-lb-name » est définie. Elle prend un argument de chaîne appelé « name » ** et l’utilise pour créer une chaîne qui suffixe « -lb » à la chaîne figurant dans l’argument nom. Une expression utilisant cette fonction de substitution s’écrit comme suit :

$substitutions.form-lb-name("my")

Elle revient my-lb.

Prenons un autre exemple :

substitutions :

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

La substitution cspol-priority est une fonction qui prend un argument appelé « priorité » et l’utilise pour calculer une valeur. Dans le reste du StyleBook, cette substitution est présentée comme suit :

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 substitution peut également être composée d’une clé et d’une valeur. La valeur peut être une valeur simple, une expression, une fonction, une carte, une liste ou un dictionnaire.

Voici un exemple de substitution appelée slist dont la valeur est une liste :

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

La valeur d’une substitution peut également être un dictionnaire de paires clé-valeur comme indiqué dans l’exemple suivant d’une substitution appelée sdict ci-dessous :

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

Vous pouvez créer des attributs plus complexes en combinant les listes et les dictionnaires. Par exemple, une substitution appelée slistofdict renvoie une liste de paires clé - valeur.

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

Mais, dans l’exemple suivant, une substitution sdictoflist renvoie une paire clé-valeur, où la valeur elle-même est une autre liste.

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

Dans les composants, ces substitutions peuvent être utilisées dans les constructions de conditions, de propriétés, de répétitions et de conditions répétées.

L’exemple suivant d’un composant montre comment une substitution peut être utilisée pour spécifier les propriétés :

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

Un cas d’utilisation pour définir une substitution dont la valeur est une liste ou un dictionnaire est lorsque vous configurez un serveur virtuel de commutation de contenu et plusieurs serveurs virtuels d’équilibrage de charge. Comme tous les serveurs virtuels d’équilibrage de charge liés au même serveur virtuel de commutation de contenu peuvent avoir une configuration identique, utilisez une liste de substitution et un dictionnaire pour créer la configuration afin d’éviter de répéter la même configuration pour chaque serveur virtuel d’équilibrage de charge.

L’exemple suivant montre la substitution et le composant dans les StyleBooks cs-lb-mon pour créer une configuration de serveur virtuel de commutation de contenu. Lors de la construction des propriétés de cs-lb-mon StyleBooks, la substitution complexe « lb-properties » spécifie les propriétés des serveurs virtuels d’équilibrage de charge associés au serveur virtuel de commutation de contenu. La substitution « lb-properties » est une fonction qui prend le nom, le type de service, l’adresse IP virtuelle, le port et les serveurs comme paramètres et génère une paire clé-valeur comme valeur. Dans le cs-pools composant, vous pouvez attribuer la valeur de cette substitution au lb-pool paramètre de chaque pool.

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

Carte de substitution

Vous pouvez créer des substitutions qui associent des clés à des valeurs. Par exemple, imaginez un scénario dans lequel vous souhaitez définir le port par défaut (valeur) à utiliser pour chaque protocole (clé). Pour cette tâche, écrivez une carte de substitution comme suit.

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

Dans cet exemple, HTTP est mappé à 80, DNS est mappé à 53 et SSL est mappé à 443. Pour récupérer le port d’un certain protocole donné en tant que paramètre, utilisez l’expression

$substitutions.port[$parameters.protocol]

L’expression renvoie une valeur basée sur le protocole spécifié par l’utilisateur.

  • Si la clé est HTTP, l’expression renvoie 80
  • Si la clé est DNS, l’expression renvoie 53
  • Si la clé est SSL, l’expression renvoie 443
  • Si la clé n’est pas présente dans la carte, l’expression ne renvoie aucune valeur

Parcourir les listes de substitution

Dans l’exemple suivant, le StyleBook parcourt une liste de substitution appelée apps pour créer un ensemble de lbvserver composants et leurs groupes de services et serveurs liés correspondants.

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"]
<!--NeedCopy-->
Substitutions