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-competsg-comp. Lorsque vous exécutez ce StyleBook, lelbvserver-comp
est d’abord créé. Lelb-sg-binding-comp
fait référence auxlbvserver-comp
propriétés, 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 l’alb-sg-binding-comp
aussi une dépendance sursg-comp
ce qui n’est pas encore créé. Par conséquent, le compilateur réorganise les composants de sorte que les dépendances d’un composant soient résolues lors 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
, etlb-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. Il convient de noter que cela s’applique également aux sections sur les substitutions et les extrants.
Dépendances cycliques
Comme un composant peut faire référence à un autre composant, il est possible que le cycle des 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 corrige 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 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
Dans l’exemple ci-dessus, il existe trois composants :lbvserver-comp,lb-sg-binding-competsg-comp. Lelbvserver-comp
composant dépend delb-sg-binding-comp
,lb-sg-binding
composants. Et, ces composants dépendent desg-comp
. Lesg-comp
composant dépend delbvserver-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 le détecte et empêche l’importation du StyleBook dans NetScaler ADM.