我有一个Terraform脚本,其中包含一些从Consul填充的变量。我想在两种不同的场景中使用这个脚本:
我检查过Terraform文档并注意到我不能使用Consul中定义的变量作为另一个变量的默认值。所以我最终得到了以下解决方法:
## vars.tf
## emulating undefined value using "null" string
variable "my_optional_variable" { default = "null" }
## main.tf
my_optional_variable = "${var.my_optional_variable == "null" ? data.consul_keys.my_optional_variable : var.my_optional_variable}"
有人能告诉我一个更好的方法吗? 如何避免使用" null"串吗
由于
答案 0 :(得分:3)
您可以使用override file。所以,如果你有vars.tf
包含:
variable "my_optional_variable" {
default = "null"
}
override.tf
包含:
variable "my_optional_variable" {
default = "not null"
}
然后${var.my_optional_variable}
应该等于not null
。覆盖文件最后加载并合并到您的配置中。而不是像目录中的其他.tf
文件一样附加在一起。
答案 1 :(得分:3)
另一个选择是coalesce
,它与空字符串一起使用,因此比您的"null"
字符串要好一些。
鉴于您的情况或具有两个变量/数据源的类似情况
variable "my_default_value" {
default = "CentOS 7"
}
variable "my_optional_variable" {
default = ""
}
您可以从给定的参数中获取“第一个非空值。必须至少提供两个参数。”
data "openstack_images_image_v2" "bastion_image" {
name = "${coalesce(var.my_optional_variable, var.my_default_value)}"
}