В настоящее время я ищу помощь с AAD и terraform. Мне нужно создать несколько пользователей и сделать это модулем, чтобы я мог использовать его в нескольких средах. Кто-нибудь так делал и может помочь?
переменная.tf
variable "users" {
type = map
default = [
[
"user1",
"user1display",
"password119823"
],
[
"user2",
"user2display",
"password119823"
]
]
}
Эта переменная возвращает ошибку, что это неправильный тип. Как я должен объявить это?
main.tf
resource "azuread_user" "team_user" {
for_each = toset(var.users)
user_principal_name = "${each.value[0]}@${var.domain}"
display_name = each.value[1]
password = each.value[2]
}
Хорошо ли сделан этот цикл? Я вроде нуб с созданием нескольких ресурсов.
Заранее спасибо!
У меня есть изменения типа переменной для списка, и код теперь действителен. Цикл возвратил ошибку: Ошибка: недопустимый аргумент набора for_each │ │ в строке 5 aad.tf, в ресурсе "azuread_user" "team_user": │ 5: for_each = toset(var.users) │ ├───────── ─────── │ │ var.users — список кортежей с 2 элементами │ │ Данное значение аргумента for_each не подходит: for_each поддерживает карты и наборы строк, но вы предоставили набор, содержащий кортеж типа .
for_each
не может перебирать список списка. Таким образом, вы можете изменить его на карту списков следующим образом:
resource "azuread_user" "team_user" {
for_each = {for idx, user in var.users: idx=>user}
user_principal_name = "${each.value[0]}@${var.domain}"
display_name = each.value[1]
password = each.value[2]
}
Есть еще один вопрос. Как преобразовать мою переменную в файл .tfvars? Когда я добавляю файл tfvars со следующим: users = [[ "user1", "user1display","password119823"], ["user2","user2display","password119823"] ] terraform просит меня "Ввести значение для var. пользователи"
@SanHolo Я бы предложил создать новый вопрос для нового выпуска.
Я думаю, что ваша структура данных, передаваемая for_each, не идеальна. Было бы намного аккуратнее, если бы вы просто выбрали что-то подобное.
---> извините за отредактированное рабочее решение :)
variable "users" {
type = map(any)
default = {
user1 = {
display = "user1display"
password = "password119823"
}
user2 = {
display = "user2display"
password = "password119823"
}
}
resource "azuread_user" "team_user" {
for_each = var.users
user_principal_name = "${each.key}@${var.domain}"
display_name = each.value.display
password = each.value.password
}
│ Ошибка: Недопустимая спецификация типа │ │ в variable.tf, строка 20, в переменной "users": │ 20: user1 = { │ 21: display = "user1display" │ 22: password = "password119823" │ 23: } │ │ A Спецификация типа представляет собой либо ключевое слово примитивного типа (bool, число, строка), либо вызов конструктора сложного типа, например список (строка).
извините.. отредактировал..
"Хорошо ли сделана эта петля?" - запустите его, и, пожалуйста, сообщите нам, как все прошло.