Application Delivery Management

Détection des dépendances

Les composants d’un StyleBook peuvent faire référence aux propriétés ou aux sections d’autres composants du même StyleBook. Les composants sont des blocs complets en eux-mêmes et ils peuvent ne pas être écrits dans le même ordre que celui dans lequel ils doivent être exécutés. Le compilateur StyleBook vérifie l’ordre dans lequel les composants sont écrits, puis les exécute dans un ordre logique.

Exemple :

components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    properties:
      name: mylb
      ipv46: 10.102.190.15
      port: 80
      servicetype: HTTP
 -
    name: lb-sg-binding-comp
    type: ns::lbvserver_servicegroup_binding
    condition: $parameters.create-binding
    properties:
      name: $components.lbvserver-comp.properties.name
      servicegroupname: $components.sg-comp.properties.servicegroupname
-
    name: sg-comp
    type: ns::servicegroup
    properties:
      servicegroupname: mysg
      servicetype: HTTP
<!--NeedCopy-->

Dans l’exemple ci-dessus, trois composants sont définis - lbvserver-comp, lb-sg-binding-compet sg-comp. Lorsque ce StyleBook est exécuté, le lbvserver-comp est d’abord créé. Le lb-sg-binding-comp fait référence aux propriétés lbvserver-comp, mais il ne peut pas être créé ensuite, bien qu’il s’agisse du deuxième composant défini dans le StyleBook. En effet, le lb-sg-binding-comp dépend également du sg-comp qui n’a pas encore été créé. Par conséquent, le compilateur réorganise les composants de manière à ce que les dépendances d’un composant soient résolues au moment où un composant est créé, et exécute cette liste réorganisée de composants. L’ordre d’exécution du StyleBook ci-dessus est le suivant : lbvserver-comp, sg-comp et lb-sg-binding-comp.

Ainsi, l’auteur d’un StyleBook n’a pas besoin de s’inquiéter de l’ordre correct des composants. Les composants peuvent apparaître dans n’importe quel ordre. Le compilateur calcule l’ordre d’exécution correct des composants en fonction de la façon dont les composants se réfèrent. Notez que cette détection et cette réorganisation des dépendances fonctionnent également pour les sections de substitution et de sortie.

Dépendances cycliques

Comme un composant peut faire référence à un autre composant, il est possible qu’un cycle de dépendances soit introduit dans la définition du StyleBook. Par exemple, si le composant A fait référence à une propriété définie dans le composant B, qui fait encore référence à une propriété définie dans le composant A. Ce type de dépendance est appelé dépendances cycliques. Les dépendances cycliques ne peuvent pas être résolues automatiquement. L’auteur du StyleBook doit corriger manuellement la définition du StyleBook pour éliminer ces dépendances cycliques. Le compilateur sera en mesure d’identifier les dépendances cycliques - si elles existent, et de les signaler.

L’exemple suivant montre une dépendance cyclique des composants :


components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    properties:
      name: $components.lb-sg-binding-comp.properties.name
      ipv46: 10.102.190.15
      port: 80
      servicetype: HTTP
  -
    name: lb-sg-binding-comp
    type: ns::lbvserver_servicegroup_binding
    condition: $parameters.create-binding
    properties:
     name: mylb
      servicegroupname: $components.sg-comp.properties.servicegroupname
  -
    name: sg-comp
    type: ns::servicegroup
    properties:
      servicegroupname: mysg
      servicetype: $components.lbvserver-comp.properties.servicetype
<!--NeedCopy-->

Dans l’exemple ci-dessus, il existe trois composants : lbvserver-comp, lb-sg-binding-comp et sg-comp. lbvserver-compdépend de lb-sg-binding-comp, lb-sg-binding comp dépendde sg-comp et sg-comp dépend de lbvserver-comp. Ici, un cycle de dépendances entre ces composants est formé et cela ne peut pas être résolu automatiquement. Par conséquent, ce StyleBook ne peut pas être exécuté. Le compilateur StyleBook détecte cela et empêche l’importation de StyleBook dans Citrix ADM.

Détection des dépendances