Abhängigkeitserkennung

Komponenten in einem StyleBook können auf Eigenschaften oder Abschnitte anderer Komponenten im selben StyleBook verweisen. Komponenten sind vollständige Blöcke von selbst und sie dürfen nicht in der Reihenfolge geschrieben werden, 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

Im obigen Beispiel gibt es drei Komponenten definiert - lbvserver-comp, lb-sg-binding-compund sg-comp. Wenn dieses StyleBook ausgeführt wird, wird zuerst der lbvserver-comp erstellt. Die lb-sg-binding-comp bezieht sich auf lbvserver-comp-Eigenschaften, kann aber nicht als nächstes erstellt werden, obwohl es die zweite Komponente ist, die im StyleBook definiert ist. Dies liegt daran, dass der lb-sg-binding-comp auch eine Abhängigkeit von der sg-comp hat, die noch erstellt wird. Folglich 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 Reihenfolge der Ausführung 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 angezeigt werden. Der Compiler berechnet die korrekte Reihenfolge der Ausführung der Komponenten basierend darauf, wie die Komponenten einander verweisen. Beachten Sie, dass diese Abhängigkeitserkennung und Neuanordnung auch für Substitutionen und Ausgabeabschnitte funktioniert.

Zyklische Abhängigkeiten

Da eine Komponente auf eine andere Komponente verweisen kann, ist es möglich, dass Zyklus von Abhängigkeiten in die Definition des StyleBook eingeführt werden kann. 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 sollte die StyleBook-Definition manuell korrigieren, um solche zyklischen Abhängigkeiten zu beseitigen. 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

Im obigen Beispiel gibt es drei Komponenten: lbvserver-comp, lb-sg-binding-compund sg-comp. lbvserver-comp hängt von lb-sg-binding-comp ab, lb-sg-binding comp hängt von sg-comp ab und 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.

Abhängigkeitserkennung