If statement 为什么Terraform不提供if语句

If statement 为什么Terraform不提供if语句,if-statement,terraform,If Statement,Terraform,Terraform为什么不提供if语句来声明这样的资源,还有更深层次的原因吗 resource "aws_ssm_parameter" "foo" { if = var.create_foo # this is not available name = "foo" type = "String" value = "bar" } 对我来说,这感觉像是一个非常常见的用例 我知道一个人可以写作 resource "aws_ssm_parameter" "foo" { co

Terraform为什么不提供if语句来声明这样的资源,还有更深层次的原因吗

resource "aws_ssm_parameter" "foo" {
  if = var.create_foo  # this is not available

  name  = "foo"
  type  = "String"
  value = "bar"
}
对我来说,这感觉像是一个非常常见的用例

我知道一个人可以写作

resource "aws_ssm_parameter" "foo" {
  count = var.create_foo ? 1 : 0

  name  = "foo"
  type  = "String"
  value = "bar"
}
但这更像是一种解决办法。这也不是故事的结局。除了这个可读性较差的
count
-构造之外,还需要在任何地方使用
aws\u ssm\u parameter.foo[0]
引用第一个参数

所以我的问题是:为什么Terraform不实现这样一个关键字?这是否有不适合设计的原因?它是否只是在技术上很难实现,而且可能很快就会出现


老实说,我正在考虑编写某种terraform预处理器,它将自动用相应的
count
语句替换所有
if
-语句,并用添加的
[0]
替换对该资源的所有引用(或更健壮的东西)。有什么原因可能不是一个好主意吗?

显然,目前人们对这种方便的功能不太感兴趣。有一种方法已经很老了,几乎没有人投票支持。

使用lambda迭代器执行条件块和资源还有其他方法,但它们都缺乏简单条件块的清洁度。另一方面,新的
null
类型更容易支持条件参数。