属性-默认源构造

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

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

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

parameters:

  -

    name: lb

    type: ns::lbvserver

components:

  -

    name: lb-comp

    type: ns::lbvserver

    properties-default-sources:

      - $parameters.lb

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

计算组件的属性

本节讨论如果在组件中使用 properties-default-sources 构造,如何提取属性。首先,样本编译器根据组件的类型(在上述示例中为 lbvserver)标识组件的属性列表。然后,编译器按这些属性的定义顺序(在组件的 properties-default-sources 部分中)从多个来源中提取它们。如果某个属性存在于多个来源中,则出现在最后一个来源中的该属性的优先级高于其他来源中的该属性。最后,可以在组件的 properties 部分中覆盖使用 properties-default-sources 构造提取的属性。请务必注意,components 部分的定义至少应有一个 properties-default-sources 部分或一个 properties 部分。可以有两者。

属性-默认源构造