Terraform:如果满足条件,则设置可选资源属性,否则不声明它

Adl*_*tos 9 conditional-statements terraform hcl terraform0.12+

Terraform 上的一些资源支持可选属性。我有兴趣仅在满足条件时才声明和设置可选属性的值。否则,根本不要声明它。

我发现的所有建议都是基于声明属性并将其值设置为null如果条件不满足,而不是根本不声明属性。

我有办法做类似以下的事情吗?在伪代码中:

resource "some_resource" "this" {
  name = var.name

  if var.name == "some_name":
    some_optional_attribute = "some_value"
  else:
    pass  # do nothing, don't even declare the optional attribute
}
Run Code Online (Sandbox Code Playgroud)

请告诉我,提前谢谢!

mar*_*ber 4

我不认为有比简单地执行以下操作更好的方法:

resource "some_resource" "this" {
  some_optional_attribute = var.name == "some_name" ? var.name : null
}
Run Code Online (Sandbox Code Playgroud)

当您将属性声明为 null 时,基本上意味着它没有被使用。我认为上面的内容相当于你的 if 语句。

  • 在 Terraform 内部,显式设置为“null”的参数与未设置的参数之间没有区别:提供程序逻辑无法看到差异,无法根据它进行区分。我期望看到 Terraform 计划对此进行更改的唯一情况是,如果条件表达式生成一个在应用之前无法知道的值,因此 Terraform 必须保守地假设该值会发生变化,但这似乎不太可能假设的“var.name”。如果您提出一个关于为什么 Terraform 检测到您的情况发生变化的_新_问题,我也许可以解释一下。 (3认同)
  • 与远程状态进行比较时,如果 Terraform 可以“假设”声明并设置为“null”的可选属性相当于首先未声明的可选属性,那就太好了。 (2认同)