Application Delivery Management

依赖性检测

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

示例

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

在上面的例子中,定义了三个组件- lbvser-complb-sg-绑定-复合和 sg-comp。执行此样本时,先创建 lbvserver-comp。lb-sg-binding-comp 引用 lbvserver-comp 属性,但尽管它是样本中定义的第二个组件,但不能接下来创建它。这是因为 lb-sg-binding-comp 还依赖也要创建的 sg-comp。因此,编译器对组件重新排序以使组件的依赖项按组件的创建时间进行解析,然后执行此重新排序的组件列表。上述样本的执行顺序为:lbvserver-comp、sg-comp 和 lb-sg-binding-comp。

这样,样书的作者不必担心组件的正确顺序。组件可以按任何顺序显示。编译器根据组件相互引用的情况计算组件的正确执行顺序。请注意,此依赖项检测和重新排序也适用于 substitutions 和 outputs 部分。

循环依赖项

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

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


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 depends 依赖于 lbvserver-comp。此处,在这些组件之间形成了依赖项循环,这无法自动解析。因此,无法执行此样书。样本编译器检测到此问题并阻止样本导入 NetScaler ADM。

依赖性检测