样书配置

依赖性检测

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

示例

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-complb-sg-binding-comp 是指 lbvserver-comp 属性,但下一步无法创建它,尽管它是样书中定义的第二个组件。这是因为 lb-sg-binding-comp 也依赖于尚未创建的 sg-comp。因此,编译器会对组件重新排序,以便在创建组件时解析组件的依赖关系,然后运行此重新排序的组件列表。上述样书的执行顺序是:lbvserver-compsg-complb-sg-binding-comp

这样,样书的作者不必担心组件的正确顺序。组件可以按任何顺序显示。编译器根据组件相互引用的情况计算组件的正确执行顺序。请注意,这也适用于替换和输出部分。

循环依赖项

由于一个组件可能会引用另一个组件,因此可能会在样书的定义中引入依赖关系循环。例如,如果组件 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-->

在上面的例子中,有三个组件: lbv服务器complb-sg-binding-compsg-complbvserver-comp 组件取决于 lb-sg-binding-complb-sg-binding 组件。而且,这些组件取决于 sg-compsg-comp 组件取决于 lbvserver-comp。此处,在这些组件之间形成了依赖项循环,这无法自动解析。因此,无法运行此样书。样书编译器会检测到此问题并阻止样书导入到 NetScaler 控制台中。

依赖性检测