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 par eux-mêmes et ils peuvent ne pas être écrits dans le même ordre qu’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

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. C’est parce que lb-sg-binding-comp a également une dépendance sur le sg-comp qui n’est pas encore créé. Par conséquent, le compilateur réordonne les composants de sorte que les dépendances d’un composant soient résolues au moment de la création d’un composant et exécute cette liste réordonnée de composants. L’ordre d’exécution du StyleBook ci-dessus est : lbvserver-comp, sg-comp et lb-sg-binding-comp.

Ainsi, l’auteur d’un StyleBook ne doit pas se soucier 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 réorganisation des dépendances fonctionne également pour les sections de substitutions et de sorties.

Dépendances cycliques

Étant donné qu’un composant peut faire référence à un autre composant, il est possible que le cycle de dépendances puisse être 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 à nouveau 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 de StyleBook pour éliminer ces dépendances cycliques. Le compilateur sera en mesure d’identifier les dépendances cycliques - si elles existent, et de le 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

Dans l’exemple ci-dessus, il existe trois composants : lbvserver-comp, lb-sg-binding-compet sg-comp. lbvserver-comp dépend de lb-sg-binding-comp, lb-sg-binding comp dépend de 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