Thanks, that worked.
Currently I have my setup as
dynamic "package_repositories" {
for_each = var.package_repositories
content {
dynamic "apt" {
for_each = lookup(package_repositories.value, "apt", [])
content {
archive_type = apt.value["archive_type"]
uri = apt.value["uri"]
distribution = apt.value["distribution"]
components = apt.value["components"]
gpg_key = apt.value["gpg_key"]
}
}
dynamic "yum" {
for_each = lookup(package_repositories.value, "yum", null)
content {
id = yum.value["id"]
display_name = yum.value["display_name"]
base_url = yum.value["base_url"]
gpg_keys = yum.value["gpg_keys"]
}
}
}
}
variables.tf
type = list(object({
apt = list(object({
archive_type = string
uri = string
distribution = string
components = list(string)
gpg_key = string
}))
yum = list(object({
id = string
display_name = string
base_url = string
gpg_keys = list(string)
}))
}))
default = []
}
I receive an error about The given value is not valid for variable "package_repositories": element 0: attribute "yum" is required.
What I’d like to have is my variable for package_repositories
be descriptive enough to explain what is expected when others use it but ideally you would only need to use apt
or yum
and not both.
The lookup
statement to pass in either []
or null
makes sense but it seems like the variable requires yum
if it is not declared in my tfvars.
.tfvars
package_repositories = [
{
apt = [{
archive_type = "DEB"
uri = "https://packages.cloud.google.com/apt"
distribution = "cloud-sdk-stretch"
components = ["main"]
gpg_key = "https://packages.cloud.google.com/apt/doc/apt-key.gpg.asc"
}]
},
{
apt = [{
archive_type = "DEB_SRC"
uri = "https://packages.cloud.google.com/apt"
distribution = "cloud-sdk-stretch"
components = ["main"]
gpg_key = "https://packages.cloud.google.com/apt/doc/apt-key.gpg.asc"
}]
}
]