可选属性

Last published : Oct 06, 2026
有时,组件的属性从表达式中获取其值,该表达式可以是简单的表达式(例如参数引用),也可以是更复杂的表达式。在组件中设置此属性值是可选的。您可以选择仅当表达式返回实际值时才设置属性值,否则可以选择不设置此属性。
例如,假设您要设置的属性之一是类型为 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”中定义了默认值,则它可能会采用该默认值。