Application Delivery Management

Properties-default-sources 构造

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

组件的属性可能分布在 StyleBook 的各个部分。例如,这些属性可能来自对象参数、返回对象的替换项、其他组件的属性或来自其他组件的输出。在这种情况下,您需要在组件定义中重新定义 StyleBook 其他部分中出现的属性。显然,这是冗余的,并且可能导致错误。为了解决此问题,可以使用 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 对象。尽管它们来自单个源,但这些属性在 StyleBook 中再次定义。此外,如果添加了与 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 的配置中,因为 persistencetype 是 lbvserver 的一个属性。因此,properties-default-sources 构造提供了一个动态接口来定义组件,而无需担心组件属性源发生更改。

组件属性的计算

本节讨论如果在组件中使用 properties-default-sources 构造,如何获取属性。首先,StyleBooks 编译器根据组件的类型(在上述示例中为 lbvserver)识别组件的属性列表。接下来,编译器按照它们定义的顺序(在组件的 properties-default-sources 部分中)从多个源获取这些属性。如果一个属性存在于多个源中,则最后一个源中出现的属性优先于其他源。最后,通过使用 properties-default-sources 构造获取的属性可以在组件的 properties 部分中被覆盖。重要的是,组件部分的定义应至少包含 properties-default-sources 部分或 properties 部分。它可以同时包含两者。

Properties-default-sources 构造