Application Delivery Management

Abhängigkeitserkennung

Komponenten in einem StyleBook können sich auf Eigenschaften oder Abschnitte anderer Komponenten im selben StyleBook beziehen. Komponenten sind in sich geschlossene Blöcke und müssen nicht in der Reihenfolge geschrieben sein, in der sie ausgeführt werden sollen. Der StyleBook-Compiler prüft die Reihenfolge, in der die Komponenten geschrieben sind, 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 sind drei Komponenten definiert: lbvserver-comp, lb-sg-binding-comp und sg-comp. Wenn dieses StyleBook ausgeführt wird, wird zuerst die lbvserver-comp erstellt. Die lb-sg-binding-comp bezieht sich auf Eigenschaften der lbvserver-comp, kann aber nicht als Nächstes erstellt werden, obwohl sie die zweite im StyleBook definierte Komponente ist. Dies liegt daran, dass die lb-sg-binding-comp auch eine Abhängigkeit von der sg-comp hat, die noch erstellt werden muss. Daher ordnet der Compiler die Komponenten neu an, sodass die Abhängigkeiten einer Komponente zum Zeitpunkt ihrer Erstellung aufgelöst werden, und führt diese neu angeordnete Liste von Komponenten aus. Die Ausführungsreihenfolge des obigen StyleBooks ist: lbvserver-comp, sg-comp und lb-sg-binding-comp.

Somit muss sich der Autor eines StyleBooks keine Gedanken über die korrekte Reihenfolge der Komponenten machen. Die Komponenten können in beliebiger Reihenfolge erscheinen. Der Compiler berechnet die korrekte Ausführungsreihenfolge der Komponenten basierend darauf, wie die Komponenten aufeinander verweisen. Beachten Sie, dass diese Abhängigkeitserkennung und Neuordnung auch für Substitutions- und Ausgabeabschnitte funktioniert.

Zirkuläre Abhängigkeiten

Da eine Komponente auf eine andere Komponente verweisen kann, können zirkuläre Abhängigkeiten in der Definition des StyleBooks entstehen. Wenn beispielsweise Komponente A auf eine in Komponente B definierte Eigenschaft verweist, die wiederum auf eine in Komponente A definierte Eigenschaft verweist. Diese Art von Abhängigkeit wird als zirkuläre Abhängigkeit bezeichnet. Zirkuläre Abhängigkeiten können nicht automatisch aufgelöst werden. Der Autor des StyleBooks sollte die StyleBook-Definition manuell korrigieren, um solche zirkulären Abhängigkeiten zu eliminieren. Der Compiler kann zirkuläre Abhängigkeiten erkennen – falls vorhanden – und diese melden.

Das folgende Beispiel zeigt eine zirkuläre 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ä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 bildet sich ein Zyklus von Abhängigkeiten zwischen diesen Komponenten, 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 die NetScaler Console importiert wird.

Abhängigkeitserkennung