StyleBook pour créer une configuration d’équilibrage de charge de base
Dans l’exemple précédent, vous avez créé un StyleBook de base pour un serveur virtuel d’équilibrage de charge. Vous pouvez enregistrer ce StyleBook sous un nom différent, puis le mettre à jour pour inclure des paramètres et des composants supplémentaires pour une configuration d’équilibrage de charge de base. Enregistrez ce fichier StyleBook sous le nom basic-lb-config.yaml.
Dans cette section, vous allez concevoir un nouveau StyleBook qui crée une configuration d’équilibrage de charge comprenant un serveur virtuel d’équilibrage de charge, un groupe de services et une liste de services. Il lie également les services au groupe de services et lie le groupe de services au serveur virtuel.
En-tête
Pour créer ce StyleBook, vous devez commencer par mettre à jour la section d’en-tête. Cette section est similaire à celle que vous avez créée pour le StyleBook du serveur virtuel d’équilibrage de charge. Dans la section d’en-tête, modifiez la valeur de name en basic-lb-config. Mettez également à jour description et display-name pour décrire ce StyleBook de manière appropriée. Vous n’avez pas à modifier les valeurs de namespace et version. Étant donné que vous avez modifié le nom, la combinaison du nom, de l’espace de noms et de la version crée un identifiant unique pour ce StyleBook dans le système.
name: basic-lb-config
description: Ce StyleBook définit une configuration d'équilibrage de charge simple.
display-name: Configuration d'équilibrage de charge
namespace: com.example.stylebooks
schema-version: "1.0"
version: "0.1"
<!--NeedCopy-->
Importer des StyleBooks
La section import-stylebooks reste la même. Elle fait référence à l’espace de noms netscaler.nitro.config pour utiliser les objets de configuration Nitro.
import-stylebooks:
-
namespace: netscaler.nitro.config
prefix: ns
version: "10.5"
<!--NeedCopy-->
Paramètres
Vous devez mettre à jour la section des paramètres pour ajouter deux paramètres supplémentaires afin de définir la liste des services ou des serveurs et le port sur lequel les services écoutent. Les trois premiers paramètres, name, ip et lb-alg, restent les mêmes.
parameters:
-
name: name
type: string
label: Nom de l'application
description: Nom de la configuration de l'application
required: true
-
name: ip
type: ipaddress
label: IP virtuelle de l'application (VIP)
description: VIP de l'application à laquelle les clients accèdent
required: true
-
name: lb-alg
type: string
label: Algorithme d'équilibrage de charge
description: Choisissez l'algorithme d'équilibrage de charge utilisé pour équilibrer les requêtes client entre les serveurs d'application.
allowed-values:
- ROUNDROBIN
- LEASTCONNECTION
default: ROUNDROBIN
-
name: svc-servers
type: ipaddress[]
label: Adresses IP des serveurs d'application
description: Les adresses IP de tous les serveurs de cette application
required: true
-
name: svc-port
type: tcp-port
label: Port du serveur
description: Le port TCP ouvert sur les serveurs d'application pour recevoir les requêtes.
default: 80
<!--NeedCopy-->
Dans cet exemple, le paramètre svc-servers est ajouté pour accepter une liste d’adresses IP des services qui représentent les serveurs backend de l’application. Il s’agit d’un paramètre obligatoire, comme l’indique required: true. Le second paramètre, svc-port, indique le numéro de port sur lequel les serveurs écoutent. Le numéro de port par défaut est 80 pour le paramètre svc-port, s’il n’est pas spécifié par l’utilisateur.
Composants
Vous devez également mettre à jour la section des composants pour définir des composants supplémentaires afin qu’ils utilisent les deux nouveaux paramètres et construisent la configuration complète d’équilibrage de charge.
Pour cet exemple, vous devez écrire la section des composants comme suit :
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
components:
-
name: svcg-comp
type: ns::servicegroup
properties:
name: $parameters.name + "-svcgrp"
servicetype: HTTP
components:
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver\_servicegroup\_binding
properties:
name: $parent.parent.properties.name
servicegroupname: $parent.properties.name
-
name: members-svcg-comp
type: ns::servicegroup\_servicegroupmember\_binding
repeat: $parameters.svc-servers
repeat-item: srv
properties:
ip: $srv
port: str($parameters.svc-port)
servicegroupname: $parent.properties.name
<!--NeedCopy-->
Dans cet exemple, le composant original lbvserver-comp (de l’exemple précédent) a maintenant un composant enfant appelé svcg-comp. Et le composant svcg-comp contient deux composants enfants. L’imbrication d’un composant dans un autre permet au composant imbriqué de créer des objets de configuration en faisant référence aux attributs du composant parent. Le composant imbriqué peut créer un ou plusieurs objets pour chaque objet créé dans le composant parent.
Le composant svcg-comp est utilisé pour créer un groupe de services sur l’instance NetScaler en utilisant les valeurs fournies pour les attributs de la ressource « servicegroup ». Dans cet exemple, vous spécifiez une valeur statique pour servicetype, tandis que name obtient sa valeur du paramètre d’entrée. Vous faites référence au paramètre name défini dans la section des paramètres en utilisant la notation $parameters.name + “-svcgrp”, où -svcgrp est ajouté (concaténé) au nom défini par l’utilisateur.
Le composant svcg-comp a deux composants enfants, lbvserver-svg-binding-comp et members-svcg-comp.
Le premier composant enfant, lbvserver-svg-binding-comp, est utilisé pour lier un objet de configuration entre le groupe de services créé par son composant parent et le serveur virtuel d’équilibrage de charge (lbvserver) créé par le composant grand-parent. La notation $parent, également appelée référence parent, est utilisée pour faire référence aux entités dans les composants parents. Par exemple, servicegroupname: $parent.properties.name fait référence au groupe de services créé par le composant parent svcg-comp, et name: $parent.parent.properties.name fait référence au serveur virtuel créé par le composant grand-parent lbvserver-comp.
Le composant members-svcg est utilisé pour lier des objets de configuration entre la liste des services et le groupe de services créé par le composant parent. La création de plusieurs objets de configuration de liaison est réalisée en utilisant la construction repeat de StyleBook pour itérer sur la liste des serveurs spécifiés dans le paramètre svc-servers. Pendant l’itération, ce composant StyleBook crée un objet de configuration Nitro de type servicegroup_servicegroupmember_binding pour chaque service (appelé srv dans la construction repeat-item) dans le groupe de services, et il définit l’attribut ip dans chaque objet de configuration Nitro sur l’adresse IP du serveur correspondant.
Généralement, vous pouvez utiliser les constructions repeat et repeat-item dans un composant pour que ce composant crée plusieurs objets de configuration du même type. Vous pouvez attribuer un nom de variable à la construction repeat-item, par exemple, srv, pour désigner la valeur actuelle dans l’itération. Ce nom de variable est référencé dans les propriétés du même composant ou dans les composants enfants sous la forme $<varname>, par exemple $srv.
Dans l’exemple ci-dessus, vous avez utilisé l’imbrication de composants les uns dans les autres pour construire facilement cette configuration. Dans ce cas particulier, l’imbrication de composants n’était pas la seule façon de construire la configuration. Vous auriez pu obtenir le même résultat sans imbrication, comme indiqué ci-dessous :
components:
-
name: members-svcg-comp
type: ns::servicegroup\_servicegroupmember\_binding
repeat: $parameters.svc-servers
repeat-item: srv
properties:
ip: $srv
port: str($parameters.svc-port)
servicegroupname: $components.svcg-comp.properties.name
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver\_servicegroup\_binding
properties:
name: $components.lbvserver-comp.properties.name
servicegroupname: $components.svcg-comp.properties.name
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
-
name: svcg-comp
type: ns::servicegroup
properties:
name: $parameters.name + "-svcgrp"
servicetype: HTTP
<!--NeedCopy-->
Ici, tous les composants sont au même niveau (c’est-à-dire qu’ils ne sont pas imbriqués) mais le résultat obtenu (la configuration NetScaler générée) est le même que celui des composants imbriqués utilisés précédemment. De plus, l’ordre dans lequel les composants sont déclarés dans le StyleBook n’a pas d’impact sur l’ordre de création des objets de configuration. Dans cet exemple, les composants svcg-comp et lbvserver-comp, bien que déclarés en dernier, doivent être construits avant de construire le second composant lbvserver-svg-binding-comp car il existe des références anticipées à ces composants dans le second composant.
Remarque
Par convention, les noms des StyleBooks, des paramètres, des substitutions, des composants et des sorties sont en minuscules. Lorsqu’ils contiennent plusieurs mots, ils sont séparés par un caractère « - ». Par exemple, « lb-bindings », « app-name », « rewrite-config », etc. Une autre convention consiste à suffixer les noms de composants avec la chaîne « -comp ».
Sorties
La dernière section que vous pouvez ajouter au nouveau StyleBook est la section des sorties où vous spécifiez ce que ce StyleBook expose à ses utilisateurs (ou à d’autres StyleBooks) après avoir été utilisé pour créer une configuration. Par exemple, vous pouvez spécifier dans la section des sorties d’exposer les objets de configuration lbvserver et servicegroup qui seraient créés par ce StyleBook.
outputs:
-
name: lbvserver-comp
value: $components.lbvserver-comp
description: Le composant qui construit l'objet de configuration Nitro lbvserver
-
name: servicegroup-comp
value: $components.svcg-comp
description: Le composant qui construit l'objet de configuration Nitro servicegroup
<!--NeedCopy-->
La section des sorties d’un StyleBook est facultative. Un StyleBook n’a pas besoin de renvoyer de sorties. Cependant, en renvoyant certains composants internes en tant que sorties, il offre plus de flexibilité à tout StyleBook qui importe ce StyleBook, comme vous pouvez le constater lors de la création d’un StyleBook composite.
Remarque
Il est recommandé d’exposer un composant entier du StyleBook dans la section des sorties, plutôt qu’une seule propriété d’un composant (par exemple, exposez l’ensemble de $components.lbvserver-comp plutôt que seulement le nom $components.lbvserver-comp.properties.name). Ajoutez également une description à la sortie expliquant ce que représente la sortie spécifique.
Créez votre StyleBook
Maintenant que vous avez défini toutes les sections requises de ce StyleBook, rassemblez-les toutes pour construire votre second StyleBook. Vous avez déjà enregistré ce fichier StyleBook sous le nom basic-lb-config.yaml. Citrix vous recommande d’utiliser le validateur YAML intégré dans la page StyleBooks pour valider et importer le contenu YAML.
Le contenu complet du fichier basic-lb-config.yaml est reproduit ci-dessous :
name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Configuration d'équilibrage de charge
description: Ce StyleBook définit une configuration d'équilibrage de charge simple.
schema-version: "1.0"
import-stylebooks:
-
namespace: netscaler.nitro.config
version: "10.5"
prefix: ns
parameters:
-
name: name
type: string
label: Nom de l'application
description: Donnez un nom à la configuration de l'application.
required: true
-
name: ip
type: ipaddress
label: IP virtuelle de l'application (VIP)
description: La VIP de l'application à laquelle les clients accèdent
required: true
-
name: lb-alg
type: string
label: Algorithme d'équilibrage de charge
description: Choisissez l'algorithme d'équilibrage de charge (méthode) utilisé pour équilibrer les requêtes client entre les serveurs d'application.
allowed-values:
- ROUNDROBIN
- LEASTCONNECTION
default: ROUNDROBIN
-
name: svc-servers
type: ipaddress[]
label: Adresses IP des serveurs d'application
description: Les adresses IP de tous les serveurs de cette application
required: true
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
-
name: svcg-comp
type: ns::servicegroup
properties:
servicegroupname: $parameters.name + "-svcgrp"
servicetype: HTTP
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver_servicegroup_binding
properties:
name: $components.lbvserver-comp.properties.name
servicegroupname: $components.svcg-comp.properties.servicegroupname
-
name: members-svcg-comp
type: ns::servicegroup_servicegroupmember_binding
repeat: $parameters.svc-servers
repeat-item: srv
properties:
ip: $srv
port: 80
servicegroupname: $components.svcg-comp.properties.servicegroupname
outputs:
-
name: lbvserver-comp
value: $components.lbvserver-comp
description: Le composant qui construit l'objet de configuration Nitro lbvserver
-
name: servicegroup-comp
value: $components.svcg-comp
description: Le composant qui construit l'objet de configuration Nitro servicegroup
<!--NeedCopy-->
Pour commencer à utiliser votre StyleBook pour créer des configurations, vous devez l’importer dans NetScaler ADM, puis l’utiliser. Pour plus d’informations, consultez Comment utiliser les StyleBooks définis par l’utilisateur.
Vous pouvez également importer ce StyleBook dans d’autres StyleBooks et utiliser ses propriétés comme décrit dans la section suivante.