Substitutions
La section Substitutions permet de définir des noms abrégés pour les expressions complexes qui peuvent être utilisés dans le reste du StyleBook pour faciliter la lecture du StyleBook. Ils sont également utiles lorsque la même expression ou valeur est répétée plusieurs fois dans le StyleBook, par exemple une valeur constante. L’utilisation d’un nom de substitution pour cette valeur vous permet de mettre à jour la valeur de substitution uniquement lorsque cette valeur doit être modifiée plutôt que de la mettre à jour à chaque emplacement qu’elle apparaît dans le StyleBook, ce qui peut être sujet à des erreurs.
Les substitutions sont également utilisées pour définir des correspondances entre les valeurs, comme décrit dans des exemples plus loin dans ce document.
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 esthttp-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-portau lieu de 8181.
substitutions:
http-port: 8181
Cela vous permet de spécifier un nom mnémonique à un numéro de port et de définir ce numéro de port en un seul endroit dans le StyleBook, quel que soit le nombre de fois où il est utilisé. Si vous souhaitez modifier le numéro de port à 8080, vous pouvez le modifier dans la section de substitution, et la modification prendra effet partout où le nom mnémoniquehttp-port
est utilisé. L’exemple suivant montre comment une substitution est utilisée dans un composant.
components:-名字:my-lbvserver-comptype:ns::lbvserverproperties:名字:$parameters.name + "-lb"servicetype:HTTPipv46:$parameters.ipport:$substitutions.http-portlbmethod:$parameters.lb-alg
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")
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")
Une autre caractéristique utile des substitutions est les cartes, où vous pouvez mapper des clés aux valeurs. Voici un exemple de substitution de carte.
substitutions: secure-port: true: int("443") false: int("80") secure-protocol: true: SSL false: HTTP
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
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 Citrix ADM, laservicetype
propriété de ce composant se voit attribuer la valeurSSLet la propriété port est attribué la valeur443. Toutefois, si l’utilisateur spécifie « false » pour ce paramètre ou désactivez la case à cocher correspondante dans l’interface graphique Citrix ADM, la valeurHTTPest affectée à laservicetype
propriété et le port reçoit la valeur80.
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, string, numberipaddress
, booléen, et d’autres types.
substitutions:
form-lb-name(name): $name + “-lb”
Dans cet exemple, nous définissons une fonction de substitution « form-lb-name » qui prend un argument de chaîne appelé « name » et l’utilise pour créer une nouvelle chaîne qui suffixe « -lb » à la chaîne dans l’argument name. Une expression utilisant cette fonction de substitution peut être écrite comme suit :
$substitutions.form-lb-name("my")
Il retournemy-lb
Prenons un autre exemple :
substitutions:
cspol-priority(priority): 10100 - 100 * $priority
La substitutioncspol-priority
est une fonction qui prend un argument appelé priorité et l’utilise pour calculer une valeur. Dans le reste du StyleBook, cette substitution peut être utilisée comme illustré dans l’exemple suivant :
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 substitution peut également être constitué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éeslist
dont la valeur est une liste :
substitutions: slist: - a - b - c
La valeur d’une substitution peut également être un dictionnaire de paires clé-valeur comme indiqué dans l’exemple suivant d’une substitution appeléesdict
ci-dessous :
substitutions: sdict: a: 1 b: 2 c: 3
Vous pouvez créer des attributs plus complexes en combinant les listes et les dictionnaires. Par exemple, une substitution appeléeslistofdict
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
Mais, dans l’exemple suivant, une substitutionsdictoflist
renvoie une paire clé-valeur, où la valeur elle-même est une autre liste.
sdictoflist: a: - 1 - 2 b: - 3 - 4
Dans les composants, ces substitutions peuvent être utilisées dans les constructions de condition, de propriétés, de répétition, de condition.
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
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. Étant donné que tous les serveurs virtuels lb liés au même serveur virtuel cs peuvent avoir une configuration identique, vous pouvez utiliser la liste de substitution et le dictionnaire pour créer cette configuration afin d’éviter de répéter cette configuration pour chaque serveur virtuel lb.
L’exemple suivant montre la substitution et le composant dans lescs-lb-mon
StyleBooks pour créer une configuration de serveur virtuel de commutation de contenu. Lors de la construction des propriétés decs-lb-mon
StyleBooks, la substitution complexe « lb-properties » spécifie les propriétés des serveurs virtuels lb associés au serveur virtuel cs. 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. Encs-pools
composant, nous attribuons la valeur de cette substitution à un paramètre lb-pool pour 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
Carte de substitution:
Vous pouvez créer des substitutions qui mappent les clés aux valeurs. Par exemple, considérez 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
Dans cet exemple, HTTP est mappé à 80, DNS à 53 et SSL à 443. Pour récupérer le port d’un certain protocole qui est 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