【问题标题】:count = signum on number and boolcount = number 和 bool 上的符号
【发布时间】:2021-12-09 01:15:13
【问题描述】:

我已经看到帖子的答案 - Is there a way AND/OR conditional operator in terraform? - 其中提到 terraform 会将 bool 转换为 1 或 0,但是,我无法让它工作 - 似乎这是特定于 0.11 版和早点?

我正在尝试使用signum(true * 0) 进行计数,但这只是不断返回invalid operand <bool/number> required

这在 terraform 11 中确实有效,但在我尝试升级到 12/13 时似乎没有。我们有一个大型存储库,如果我可以让它工作而不是将所有布尔值转换为数字,那会更容易。有人可以澄清一下这在 12 版或更高版本中是否可行?

完整的例子是:

count = signum(var.cluster_size_max * var.with_external_elb)

如果 cluster_size_max 设置为 1 或更多且 external_elbtrue,则构建外部 ELB。

注意:我尝试使用 && 代替 signum 但这也不起作用。我得到的错误类似:

count                    = var.cluster_size_max && var.with_external_elb ? 1 : 0
----------------
var.cluster_size_max is 1
Unsuitable value for left operand: bool required.

【问题讨论】:

  • 你为什么要尝试做一些奇怪的魔法而不是明确地写出来? var.with_external_elb && var.cluster_size_max > 0 ? 1 : 0
  • 嗨,卢克,谢谢。我在 terraform 控制台中对其进行了测试,但这似乎仍然无法正常工作,因为 external_elb 是一个布尔值。我跑了: 1 && true > 0 ? 1 :0 -- 不确定我是否遗漏了什么?错误是一样的,需要一个数字
  • 在我的第一条评论中有一个> 0,您不能简单地省略或更改其位置。 bool && int > threshold 格式良好,true && 1 > 0 ? 1 : 0 有效。
  • 对不起,我没有想到 - 我试图将 > 0 放在 bool 之后。另一个问题。我猜如果有&&,那么就不需要signum,因为它仍然只会构建0或1。我的理解是否正确?
  • signum 可以返回当前 sn-p 不能返回的 -1 - 但这是一件好事,因为无论如何您都不需要 -1。

标签: amazon-web-services terraform


【解决方案1】:

对于简单的条件语句,您不需要使用signum 函数。

使用&&作为,使用>检查var.cluster_size_max的值&使用?+:作为三元运算符来确定最终的整数值1 或 0 基于 and 结果。

试试:

count = var.with_external_elb && var.cluster_size_max > 0 ? 1 : 0

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 2011-09-30
    • 1970-01-01
    • 2012-02-01
    • 2021-11-03
    • 1970-01-01
    • 2017-02-08
    • 2022-12-01
    • 1970-01-01
    相关资源
    最近更新 更多