依赖检测
样本中的组件可以引用同一样本中的其他组件的属性或部分。组件本身就是完整的块,可能无法按照必须运行的顺序写入。样本编译器会检查组件的编写顺序,然后按逻辑顺序运行它们。
示例:
—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。创建绑定属性:name: $components.lbvserver-com .properties.nameservicegroupname - name: sg-comp type: ns::servicegroup properties: servicegroupname: mysg servicetype: HTTP
在上面的例子中,定义了三个组件-lbvser-comp,lb-sg——绑定——复合和sg公司。运行此样书时,首先创建了lbvserver组件
。lb sg绑定组件
是指lbvserver组件
属性,但下一步无法创建它,尽管它是样书中定义的第二个组件。这是因为lb sg绑定组件
也依赖于尚未创建的sg公司
。因此,编译器会对组件重新排序,以便在创建组件时解析组件的依赖关系,然后运行此重新排序的组件列表。上述样书的执行顺序是:lbvserver组件
、sg公司
和lb sg绑定组件
。
这样,样本的作者不必担心组件的正确顺序。组件可以按任何顺序显示。编译器根据组件相互引用的情况计算组件的正确执行顺序。请注意,这也适用于替换和输出部分。
循环依赖项
由于一个组件可能会引用另一个组件,因此可能会在样书的定义中引入依赖关系循环。例如,如果组件一个引用组件B中定义的一个属性,而后者也引用组件一个中定义的一个属性。这种依赖项称为循环依赖项。循环依赖项无法自动解析。样书的作者手动更正样书定义,以消除此类循环依赖关系。编译器能够识别循环依赖项(如果存在)并报告。
以下示例显示了组件的循环依赖项:
—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。创建绑定属性: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服务器做伴奏、lb sg绑定组件和sg公司。lbvserver组件
组件取决于lb sg绑定组件
、lb-sg绑定
组件。而且,这些组件取决于sg公司
。sg公司
组件取决于lbvserver组件
。此处,在这些组件之间形成了依赖项循环,这无法自动解析。因此,无法运行此样书。样本编译器检测到此问题并阻止样本导入 Citrix行政