Abhängigkeitserkennung
Komponenten in einem StyleBook können auf Eigenschaften oder Abschnitte anderer Komponenten im selben StyleBook verweisen. Komponenten sind selbst komplette Blöcke und werden möglicherweise nicht in der gleichen Reihenfolge geschrieben, in der sie ausgeführt werden müssen. Der StyleBook-Compiler überprüft die Reihenfolge, in der die Komponenten geschrieben werden, und führt sie dann in einer logischen Reihenfolge aus.
Beispiel:
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-->
Im obigen Beispiel gibt es drei Komponenten definiert - lbvserver-comp, lb-sg-binding-compund sg-comp. Wenn Sie dieses StyleBook ausführen, wird lbvserver-comp
zuerst erstellt. lb-sg-binding-comp
bezieht sich auf die Eigenschaften lbvserver-comp
, kann jedoch nicht als nächstes erstellt werden, obwohl es die zweite im StyleBook definierte Komponente ist. Dies liegt daran, dass lb-sg-binding-comp
auch eine Abhängigkeit von sg-comp
hat, das noch nicht erstellt wurde. Infolgedessen ordnet der Compiler die Komponenten neu an, sodass die Abhängigkeiten einer Komponente zum Zeitpunkt der Erstellung einer Komponente aufgelöst werden, und führt diese neu geordnete Liste von Komponenten aus. Die Ausführreihenfolge des obigen StyleBook ist: lbvserver-comp
, sg-comp
und lb-sg-binding-comp
.
Daher muss sich der Autor eines StyleBook nicht um die korrekte Reihenfolge der Komponenten kümmern. Die Komponenten können in beliebiger Reihenfolge erscheinen. Der Compiler berechnet die korrekte Reihenfolge der Ausführung der Komponenten basierend darauf, wie die Komponenten einander verweisen. Beachten Sie, dass dies auch für Abschnitte zu Substitutionen und Ausgaben gilt.
Zyklische Abhängigkeiten
Da sich eine Komponente möglicherweise auf eine andere Komponente bezieht, ist es möglich, dass der Abhängigkeitskreislauf in die Definition des StyleBook eingeführt wird. Beispiel: Wenn Komponente A auf eine Eigenschaft verweist, die in Komponente B definiert ist, die wiederum auf eine Eigenschaft verweist, die in Komponente A definiert ist. Diese Art von Abhängigkeit wird als zyklische Abhängigkeiten bezeichnet. Zyklische Abhängigkeiten können nicht automatisch aufgelöst werden. Der Autor des StyleBook korrigiert die StyleBook-Definition manuell, um solche zyklischen Abhängigkeiten zu eliminieren. Der Compiler kann zyklische Abhängigkeiten identifizieren - wenn sie existieren, und melden.
Das folgende Beispiel zeigt eine zyklische Abhängigkeit von Komponenten:
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-->
Im obigen Beispiel gibt es drei Komponenten: lbvserver-comp, lb-sg-binding-compund sg-comp. Die Komponente lbvserver-comp
hängt von den Komponenten lb-sg-binding-comp
, lb-sg-binding
ab. Und diese Komponenten hängen davon ab sg-comp
. Die Komponente sg-comp
hängt von lbvserver-comp
ab. Hier wird ein Zyklus von Abhängigkeiten zwischen diesen Komponenten gebildet, der nicht automatisch aufgelöst werden kann. Daher kann dieses StyleBook nicht ausgeführt werden. Der StyleBook-Compiler erkennt dies und verhindert, dass das StyleBook in Citrix ADM importiert wird.