如何使用Consul中定义的默认值在Terraform中定义可选变量

时间:2018-05-22 13:20:25

标签: terraform consul

我有一个Terraform脚本,其中包含一些从Consul填充的变量。我想在两种不同的场景中使用这个脚本:

  • 场景1.使用Consul的默认值,一切正常。
  • 场景2.我需要覆盖一些变量。

我检查过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"串吗

由于

2 个答案:

答案 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)}"
}