#terraform
Вопрос:
У меня есть динамический блок для переменной.
dynamic "settings" {
for_each = var.settings
content {
id = lookup(settings.value, "id", null)
...
}
}
Но из вызывающего модуля не обязательно, settings
чтобы он всегда существовал, и когда-нибудь он просто будет передан null
.
settings = null
Однако, когда это происходит, я начинаю следить за ходом планирования.
var.settings is null
Cannot use a null value in for_each.
Так что, в принципе, я хочу только динамическую генерацию блоков, когда settings
этого нет null
. Как лучше всего я могу решить эту проблему?
Ответ №1:
В этой ситуации обычно не требуется назначать list
map
переменную типа или null
для обозначения неопределенного значения. Вместо этого вы хотели бы использовать пустые конструкторы []
для list
и {}
для map
. Это даст вам желаемое поведение и будет способствовать чистоте кода.
Если вы действительно хотите назначить null
не string
или number
типу, то вы можете использовать функцию объединения с шаблоном объединения null (некоторые языки предоставляют для этого операторы; например ?:
, в JS):
for_each = coalesce(var.settings, [])
и это даст вам то поведение, которого вы желаете. Обратите внимание, что он в основном добавляет еще один слой для использования пустого конструктора в качестве резервной копии/по умолчанию, что является образцом лучших практик, рекомендованным в начале ответа.