У меня есть переменная терраформа:
variable "volumes" {
default = [
{
"name" : "mnt",
"value" : "/mnt/cvdupdate/"
},
{
"name" : "efs",
"value" : "/var"
},
]
}
и я пытаюсь создать динамический блок
dynamic "volume" {
for_each = var.volumes == "" ? [] : [true]
content {
name = volume["name"]
}
}
но я получаю сообщение об ошибке, когда я запускаю план
name = volume["name"]
│
│ The given key does not identify an element in this collection value.
желаемый результат будет:
volume {
name = "mnt"
}
volume {
name = "efs"
}
что не так с моим кодом?





Поскольку вы используете for_each, вы должны использовать value. Также ваше условие неверно. Все должно быть:
dynamic "volume" {
for_each = var.volumes == "" ? [] : var.volumes
content {
name = volume.value["name"]
}
}
Это список карт, поэтому потребуются некоторые обходные пути.
@bruvio Я обновляю ответ. Помимо отсутствия .value, проблема была в вашем состоянии.
@MarkoE Помимо отсутствия .value, проблема была в состоянии ОП. Я обновил ответ, чтобы исправить условие.
Вы можете просто использовать for_each = var.volumes[*]:
dynamic "volume" {
for_each = var.volumes[*]
content {
name = volume.value["name"]
}
}
или:
dynamic "volume" {
for_each = var.volumes[*]
content {
name = volume.value.name # <------
}
}
получить эту ошибку 167: name = values(var.volumes.name) │ ├──────────────── │ │ var.volumes это кортеж из 2 элементов │ │ Это значение не имеет любые атрибуты. ╵
Поскольку вы создаете if-else подобное условие для передачи значения в цикл for, условию необходимо установить значение. https://developer.hashicorp.com/terraform/language/meta-arguments/for_each
[true] на var.volumes, чтобы передать значение.
for_each = var.volumes == "" ? [] : var.volumes content {
name = volume.value["name"]
Окончательный рабочий код приведен ниже, опубликованный @marcin.
dynamic "volume" {
for_each = var.volumes == "" ? [] : var.volumes
content {
name = volume.value["name"]
}
}
получить эту ошибку 167: name = volume.value["name"] │ ├──────────────── │ │ volume.value is true │ │ Это значение не имеет индексов. ╵