Application Delivery Management

依赖项检测

StyleBook 中的组件可以引用同一 StyleBook 中其他组件的属性或部分。组件本身是完整的块,它们编写的顺序可能与执行顺序不同。StyleBook 编译器会检查组件的编写顺序,然后按逻辑顺序执行它们。

示例

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-->

在上述示例中,定义了三个组件:lbvserver-complb-sg-binding-compsg-comp。当此 StyleBook 执行时,首先创建 lbvserver-comp。lb-sg-binding-comp 引用 lbvserver-comp 属性,但即使它是 StyleBook 中定义的第二个组件,也无法紧接着创建。这是因为 lb-sg-binding-comp 还依赖于尚未创建的 sg-comp。因此,编译器会重新排序组件,以便在创建组件时解决其依赖项,并执行此重新排序的组件列表。上述 StyleBook 的执行顺序是:lbvserver-comp、sg-comp 和 lb-sg-binding-comp。

因此,StyleBook 的作者无需担心组件的正确顺序。组件可以以任何顺序出现。编译器会根据组件之间的相互引用方式计算组件的正确执行顺序。请注意,此依赖项检测和重新排序也适用于替换和输出部分。

循环依赖项

由于一个组件可能引用另一个组件,因此 StyleBook 的定义中可能会引入依赖项循环。例如,如果组件 A 引用组件 B 中定义的属性,而组件 B 又引用组件 A 中定义的属性。这种依赖项称为循环依赖项。循环依赖项无法自动解决。StyleBook 的作者应手动更正 StyleBook 定义以消除此类循环依赖项。编译器将能够识别循环依赖项(如果存在)并进行报告。

以下示例显示了组件的循环依赖项:


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-->

在上述示例中,有三个组件:lbvserver-complb-sg-binding-compsg-comp。lbvserver-comp 依赖于 lb-sg-binding-comp,lb-sg-binding-comp 依赖于 sg-comp,而 sg-comp 依赖于 lbvserver-comp。这里,这些组件之间形成了依赖项循环,无法自动解决。因此,此 StyleBook 无法执行。StyleBook 编译器会检测到此情况,并阻止将 StyleBook 导入到 NetScaler Console 中。

依赖项检测