样书配置

属性-默认源构造

properties-default-sources 构造类似于 parameters-default-sources 构造。parameters-default-sources 构造允许在样书中重用(来自其他样书的)现有参数,properties-default-sources 构造允许用户根据现有来源指定组件的属性。

组件的属性可以分布在样书的多个部分中。例如,属性可能来自对象参数、返回对象的替换、其他组件的属性或其他组件的输出。在此类情况下,您需要在组件的定义中重新定义在样书的其他部分中出现的属性。显然,这是多余的,且可能会导致出错。为了解决此问题,可以使用 properties-default-sources 构造。properties-default-sources 构造是一个列表,其中每项均标识组件的一些属性的一个来源。

例如,考虑创建 lbvserver 配置的组件。此组件定义 lbvserver 的属性,如下所示。

parameters:

  -

    name: lb

    type: ns::lbvserver

components:

  -

    name: lb-comp

    type: ns::lbvserver

    properties:

      name: $parameters.lb.name

      ipv46: $parameters.lb.ipv46

      port: $parameters.lb.port

      servicetype: $parameters.lb.servicetype

      lbmethod: $parameters.lb.lbmethod
<!--NeedCopy-->

在上述示例中,看到 components 部分中定义的所有属性的值均取自 $parameters.lb 对象。尽管它们取自一个来源,但在样书中再次定义了属性。此外,如果添加了与 lbvserver 的配置相关的 $parameters.lb 对象的新子参数,则需要更新 lb-comp 组件以添加与新子参数对应的新属性。

为了避免重新定义属性以及为了提取某个组件的所有相关属性而无需明确在 properties 部分中列出它们,可以使用 properties-default-sources 构造。上述示例可以编写如下。

parameters:

  -

    name: lb

    type: ns::lbvserver

components:

  -

    name: lb-comp

    type: ns::lbvserver

    properties-default-sources:

      - $parameters.lb
<!--NeedCopy-->

在上述示例中,通过使用 properties-default-sources 构造,减小了组件定义的规模,这样,您可以简明地定义组件。此外,每当组件的属性的来源更改时,更改会自动反映出来。例如,当在 $parameters.lb 对象中添加新属性 persistencetype 时,默认情况下,该属性会添加到 lb-comp 的配置中,因为 persistencetypelbvserver 的属性。因此,properties-default-sources 构造提供了定义组件的动态接口,而无需担心组件的属性的来源发生的更改。

计算组件的属性

本节讨论如果在组件中使用 properties-default-sources 构造,如何提取属性。首先,样书编译器根据组件的类型识别组件的属性列表(在上例中为 lbvserver。)接下来,编译器按照定义的顺序从多个源中获取这些属性(在组件的属性-默认源部分)。如果某个属性存在于多个来源中,则出现在最后一个来源中的该属性的优先级高于其他来源中的该属性。最后,可以在组件的 properties 部分中覆盖使用 properties-default-sources 构造提取的属性。需要注意的是,组件部分的定义至少有属性-默认源部分或属性部分。可以有两者。

属性-默认源构造