mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-20 11:48:24 -06:00
Terraform 0.7 introduces lists and maps as first-class values for variables, in addition to string values which were previously available. However, there was previously no way to override the default value of a list or map, and the functionality for overriding specific map keys was broken. Using the environment variable method for setting variable values, there was previously no way to give a variable a value of a list or map. These now support HCL for individual values - specifying: TF_VAR_test='["Hello", "World"]' will set the variable `test` to a two-element list containing "Hello" and "World". Specifying TF_VAR_test_map='{"Hello = "World", "Foo" = "bar"}' will set the variable `test_map` to a two-element map with keys "Hello" and "Foo", and values "World" and "bar" respectively. The same logic is applied to `-var` flags, and the file parsed by `-var-files` ("autoVariables"). Note that care must be taken to not run into shell expansion for `-var-` flags and environment variables. We also merge map keys where appropriate. The override syntax has changed (to be noted in CHANGELOG as a breaking change), so several tests needed their syntax updating from the old `amis.us-east-1 = "newValue"` style to `amis = "{ "us-east-1" = "newValue"}"` style as defined in TF-002. In order to continue supporting the `-var "foo=bar"` type of variable flag (which is not valid HCL), a special case error is checked after HCL parsing fails, and the old code path runs instead.
34 lines
533 B
HCL
34 lines
533 B
HCL
variable "amis" {
|
|
default = {
|
|
us-east-1 = "foo"
|
|
us-west-2 = "foo"
|
|
}
|
|
}
|
|
|
|
variable "test_list" {
|
|
type = "list"
|
|
}
|
|
|
|
variable "test_map" {
|
|
type = "map"
|
|
}
|
|
|
|
variable "bar" {
|
|
default = "baz"
|
|
}
|
|
|
|
variable "foo" {}
|
|
|
|
resource "aws_instance" "foo" {
|
|
num = "2"
|
|
bar = "${var.bar}"
|
|
list = "${join(",", var.test_list)}"
|
|
map = "${join(",", keys(var.test_map))}"
|
|
}
|
|
|
|
resource "aws_instance" "bar" {
|
|
foo = "${var.foo}"
|
|
bar = "${lookup(var.amis, var.foo)}"
|
|
baz = "${var.amis["us-east-1"]}"
|
|
}
|