属性默认源构造
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
在上面的示例中,请注意组件部分中定义的所有属性的值都取自 $parameters.lb 对象。尽管它们取自单一来源,但这些属性在 StyleBook 中再次定义。此外,如果添加了与
lbvserver 配置相关的新子参数到 $parameters.lb 对象,则需要更新 lb-comp 组件以添加与新子参数对应的新属性。
为了避免重新定义属性并在不显式列出属性部分的情况下获取组件的所有相关属性,可以使用 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)时,此属性默认添加到 lb-comp 的配置中,因为 persistencetype 是 lbvserver 的属性。因此,properties-default-sources 构造提供了一个动态接口来定义组件,而无需担心组件属性源发生变化。
组件属性的计算
本节讨论如果在组件中使用 properties-default-sources 构造,如何获取属性。首先,StyleBooks 编译器根据其类型(在上面的示例中为
lbvserver)识别组件的属性列表。接下来,编译器按照它们定义的顺序(在组件的 properties-default-sources 部分中)从多个源获取这些属性。如果属性存在于多个源中,则最后一个源中出现的属性优先于其他属性。最后,通过使用 properties-default-sources 构造获取的属性可以在组件的 properties 部分中被覆盖。值得注意的是,组件部分的定义至少包含 properties-default-sources 部分或 properties 部分。它可以同时包含两者。