0

我需要根据另一个自动计算一个卷大小。简化示例:

有输入参数

data_disk_size:
  type: number
  default: 50

我们希望第二卷为: 100 if 1 < data_disk_size < 200; 如果 200 < data_disk_size < 400,则为 200;否则 400

据我了解,条件块无济于事,因为它仅使用布尔值操作,可用选项是 if 和 yaql。但我无法设法将它们一起使用:

  instance_volume_2:
    type: OS::Cinder::Volume
    properties:
      ...
      size:
        if:
        - yaql:
            expression: $.data > 1 and $.data < 200
            data: {get_param: data_disk_size}
        - 100
        - 200 {only for test, there should be nested if}

它给:

'错误:if.yaql:函数“yaql”在此上下文中无效'

所以剩下的唯一选择是纯 yaql,但它没有 if 运算符!

我错过了什么?也许有简单的方法来做到这一点?

4

1 回答 1

0

我找到了解决方案!丑陋,但工作之一:)

YAQL 没有 if,但有其他逻辑运算符,例如 and/or。所以值可以这样计算:

instance_volume_2:
  type: OS::Cinder::Volume
    properties:
      ...
      size:
        yaql:
          expression: (($.data < 200 and 100) or ($.data < 400 and 200)) or 400
          data: {get_param: data_disk_size}
于 2021-03-22T08:29:06.740 回答