Application Delivery Management

Abhängigkeitserkennung

Komponenten in einem StyleBook können auf Eigenschaften oder Abschnitte anderer Komponenten im selben StyleBook verweisen. Komponenten sind für sich genommen komplette Blöcke und sie 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 dieses StyleBook ausgeführt wird, wird zuerst der lbvserver-comp erstellt. Der lb-sg-binding-comp bezieht sich auf die Eigenschaften von lbvserver-comp, kann aber nicht als Nächstes erstellt werden, obwohl er die zweite im StyleBook definierte Komponente ist. Das liegt daran, dass der lb-sg-binding-comp auch vom sg-comp abhängig ist, der noch erstellt werden muss. Infolgedessen ordnet der Compiler die Komponenten neu an, sodass die Abhängigkeiten einer Komponente zum Zeitpunkt der Erstellung einer Komponente aufgelöst sind, und führt diese neu geordnete Liste von Komponenten aus. Die Ausführungsreihenfolge des obigen StyleBooks 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 diese Abhängigkeitserkennung und Neuordnung auch für Substitutions- und Ausgabebereiche funktioniert.

Zyklische Abhängigkeiten

Da eine Komponente auf eine andere Komponente verweisen kann, ist es möglich, dass ein Abhängigkeitszyklus 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 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
<!--NeedCopy-->

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

Abhängigkeitserkennung