可选属性
在某些情况下,组件的属性从表达式获取其值,该表达式可以是简单的表达式(例如参数引用),也可以是更复杂的表达式。在组件中设置此属性值是可选的。您可以选择仅当表达式返回实际值时才设置属性值,否则可以选择不设置此属性。
例如,假设您要设置的属性之一是类型为 ns::lbvserver 的组件的 lbmethod(负载均衡算法)。属性 lbmethod 的值取自用户提供的参数值,如下所示:
components
-
name: lbvserver_comp
type: ns::lbvserver
properties:
name: $parameters.lb-appname + "-lb"
servicetype: $parameters.lb-service-type
ipv46: $parameters.lb-virtual-ip
port: 80
lbmethod: $parameters.lb-advanced.algorithm
现在,假设参数 lb-advanced.algorithm 是一个可选参数。而且,如果用户因为它是可选的而未为此参数提供值,则表达式 $parameters.lb-advanced.algorithm 将评估为空值。因此,将为 lbmethod 属性传递一个无效值。为了避免这种情况,您可以通过在其名称后附加“?”来将属性标记为可选,如下所示:
components
-
name: lbvserver_comp
type: ns::lbvserver
properties:
name: $parameters.lb-appname + "-lb"
servicetype: $parameters.lb-service-type
ipv46: $parameters.lb-virtual-ip
port: 80
lbmethod?: $parameters.lb-advanced.algorithm
如果右侧的表达式评估为空,则使用“?”会省略该属性,在这种情况下,这等同于按如下方式定义的组件:
components
-
name: lbvserver_comp
type: ns::lbvserver
properties:
name: $parameters.lb-appname + "-lb"
servicetype: $parameters.lb-service-type
ipv46: $parameters.lb-virtual-ip
port: 80
因为 lbmethod 是可选的,所以省略它仍然使此组件有效。请注意,如果 lbmethod 的类型“ns::lbvserver”中定义了默认值,则 lbmethod 可能会采用其默认值。