Эта ошибка появляется, потому что в объявлении ресурса отсутствует уровень вложенности.
В качестве примера используется следующее объявление собственного синтаксиса:
resource "gsuite_user" "employee" {
for_each = var.employee_map
change_password_next_login = true
# etc, etc
}
Обратите внимание, что в приведенном вышеАргумент for_each
находится внутри блока resource
вместе с аргументом change_password_next_login
и всеми последующими. Чтобы имитировать это в JSON, аналогично, свойство "for_each"
должно находиться внутри объекта JSON, представляющего этот блок:
{
"resource": {
"gsuite_user": {
"employee": {
"for_each": "${var.employee_map}",
"change_password_next_login": true,
"name": {
"family_name": "${each.value.last_name}",
"given_name": "${each.value.first_name}"
},
"password": "password",
"primary_email" :"${var.first_name}.${var.last_name}@email",
"lifecycle": {
"ignore_changes": ["password", "change_password_next_login"]
}
}
}
}
}
Если вы поместите for_each
непосредственно в объект gsuite_user
, тогда декодер JSON предполагаетВы пытались объявить блок resource "gsuite_user" "for_each"
и, таким образом, пытаетесь интерпретировать "${var.employee_map}"
как тело этого блока. Это недопустимо, потому что тело блока всегда должно быть представлено как объект JSON. (Это также может быть массив, в этом случае он будет объявлять один или несколько блоков, но в этом сценарии это не имеет смысла, поскольку метки блоков ресурсов должны быть уникальными внутри модуля.)