Application Delivery Management

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 créer un serveur virtuel d’équilibrage de charge. Vous pouvez enregistrer ce StyleBook sous un autre nom, puis le mettre à jour pour inclure des paramètres et des composants supplémentaires pour une configuration de base d’équilibrage de charge. 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 serveur virtuel d’équilibrage de charge StyleBook. Dans la section d’en-tête, remplacez la valeur du nom par basic-lb-config. Mettez également à jour la description et le nom d’affichage pour décrire correctement ce StyleBook. Il n’est pas nécessaire de modifier l’espace de noms et les valeurs de version . Comme 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: This StyleBook defines a simple load balancing configuration.
display-name: Load Balancing Configuration
namespace: com.example.stylebooks
schema-version: "1.0"
version: "0.1"
<!--NeedCopy-->

Importer des StyleBooks

La section import-stylebooks reste la même. Il 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 pour définir la liste des services ou 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: Application Name
 description: Name of the application configuration
 required: true
  -
   name: ip
   type: ipaddress
   label: Application Virtual IP (VIP)
   description: Application VIP that the clients access
   required: true
  -
   name: lb-alg
   type: string
   label: LoadBalancing Algorithm
   description: Choose the load balancing algorithm used for load balancing client requests between the application servers.
     allowed-values:
     - ROUNDROBIN
     - LEASTCONNECTION
      default: ROUNDROBIN
  -
   name: svc-servers
   type: ipaddress[]
   label: Application Server IPs
   description: The IP addresses of all the servers of this application
   required: true
  -
   name: svc-port
   type: tcp-port
   label: Server Port
   description: The TCP port open on the application servers to receive requests.
   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 principaux de l’application. Ceci est un paramètre obligatoire comme indiqué par requis : true. Le deuxième 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 créent 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 d’origine lbvserver-comp (de l’exemple précédent) possède désormais un composant enfant appelé svcg-comp. De plus, le composant svcg-comp contient deux composants enfants. L’imbrication d’un composant dans un autre composant permet au composant imbriqué de créer des objets de configuration en se référant 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 le type de service, tandis que name obtient sa valeur à partir du paramètre d’entrée. Vous faites référence au nom du paramètre 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 parent du parent. La notation $parent, également appelée référence parente, 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 parent lbvserver-compdu parent.

Le composant members-svcg est utilisé pour lier des objets de configuration entre la liste des services au 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 de répétition de StyleBook pour parcourir la liste des serveurs spécifiés dans le paramètre svc-servers. Au cours de 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 ) du groupe de services, et il définit l’attribut IP de chaque objet de configuration Nitro sur l’adresse IP du serveur correspondant.

En général, vous pouvez utiliser les constructions repeat et repeat-item d’un composant pour que ce composant génère 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 comme $<varname>, par exemple $srv.

Dans l’exemple ci-dessus, vous avez utilisé l’imbrication de composants les uns aux autres pour construire facilement cette configuration. Dans ce cas particulier, l’imbrication des composants n’était pas le seul moyen de créer 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. En outre, l’ordre dans lequel les composants sont déclarés dans le StyleBook n’a pas d’incidence sur l’ordre de création des objets de configuration. Dans cet exemple, les composants svcg-comp etlbvserver-comp**, même s’ils ont été déclarés en dernier, doivent être construits avant de générer le deuxième composant **lbvserver-svg-binding-comp car le second composant contientdes références directes à ces composants.

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 des composants avec la chaîne « -comp ».

Sorties

La dernière section que vous pouvez ajouter au nouveau StyleBook est la section des sorties dans laquelle vous spécifiez ce que ce StyleBook expose à ses utilisateurs (ou dans 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: The component that builds the Nitro lbvserver configuration object
 -
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->

La section des sorties d’un StyleBook est facultative. Un StyleBook n’a pas besoin de renvoyer des sorties. Cependant, en renvoyant certains composants internes sous forme de sorties, cela donne aux StyleBooks qui importent ce StyleBook plus de flexibilité, 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’intégralité de $components.lbvserver-comp plutôt que 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, regroupez-les toutes pour créer votre second StyleBook. Vous avez déjà enregistré ce fichier StyleBook en tant que basic-lb-config.yaml. Citrix vous recommande d’utiliser le validateur YAML intégré à 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: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"

import-stylebooks:
 -
  namespace: netscaler.nitro.config
  version: "10.5"
  prefix: ns
parameters:
 -
  name: name
  type: string
  label: Application Name
  description: Give a name to the application configuration.
  required: true
 -
  name: ip
  type: ipaddress
  label: Application Virtual IP (VIP)
  description: The Application VIP that clients access
  required: true
 -
  name: lb-alg
  type: string
  label: LoadBalancing Algorithm
  description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
  allowed-values:
     - ROUNDROBIN
     - LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: Application Server IPs
  description: The IP addresses of all the servers of this 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: The component that builds the Nitro lbvserver configuration object
-
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--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 des 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.

StyleBook pour créer une configuration d’équilibrage de charge de base