I have a Terraform script with some variables populated from Consul. I want to use this script in two different scenarios:
I've checked Terraform documentation and noticed that I can't use a variable defined in Consul as a default value for some another variable. So I ended up with following workaround:
## 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}"
Can somebody show me a better way to do it? How to avoid a hack with a "null" string?
Thanks
Another option is coalesce
which works with empty strings so is slightly better than your "null"
string.
Given your scenario or a similar case with two variables/data sources
variable "my_default_value" {
default = "CentOS 7"
}
variable "my_optional_variable" {
default = ""
}
You can take the "first non-empty value from the given arguments. At least two arguments must be provided."
data "openstack_images_image_v2" "bastion_image" {
name = "${coalesce(var.my_optional_variable, var.my_default_value)}"
}
if your optional variable needs to come externally or from a declared resource you can use count
and ternaries to accomplish this.
variable "my_variable_id" {
type = string
default = ""
}
resource "cloud_resource" "my_resource" {
count = var.my_variable == "" ? 1 : 0
other_params = {...}
}
resource "dependent_cloud_resource" "my_other_resource" {
other_resource_id = var.my_variable_id == "" ? cloud_resrouce.my_resource[0].id : var.my_variable_id
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With