#terraform
#terraform
Вопрос:
Мне нужна логика вложенного цикла. например.
У меня есть один локальный:
locals {
build_args = {
api: {
RAILS_ENV: "production"
}
client: {
NODE_ENV: "production"
}
}
}
Теперь я хотел бы подключиться к CircleCI с помощью terraform и установить эти среды в соответствующих проектах CircleCI (api и client). Информация о проектах circleci (название проекта) Я продолжаю здесь:
apps: {
api: {
desired_count: 1,
load_balancer: {
container_name: "api",
container_port: 5000,
health_check_path: "/",
listener: {
path: "api",
},
},
circleci_project: "some-api",
},
client: {
desired_count: 1,
load_balancer: {
container_name: "client",
container_port: 3000,
health_check_path: "/",
listener: {
path: "web",
},
},
circleci_project: "some-client",
}
}
Теперь мне нужно создать ресурс:
resource "circleci_environment_variable" "this" {
project = projects_from_apps_var
name = names_from_local_build_args
value = value_from_local_build_args
}
Итак, как вы можете видеть, мне нужны два цикла один в другом, чтобы генерировать множество пар имя / значения env для многих проектов.
Комментарии:
1. Согласно вашему вопросу, у вас будет только один цикл, повторяющийся по списку
api, client
. Где возникнет второй цикл?2. Внутри API и клиента мне нужно перебирать envs, так что это второй цикл
3. Вероятно, вы захотите объединить две карты в матрицу 2×2, а затем выполнить итерацию по ней как преобразованную 1×4.
4. Есть примеры такого подхода?
Ответ №1:
Просто создайте карту с ключом по имени проекта и переменной и примените кучу ресурсов для каждой комбинации:
locals {
map = merge([
for project, env in local.build_args : {
for name, value in env : "${project}-${name}" => {
name = name,
value = value,
project = project
}
}
]...)
}
resource "circleci_environment_variable" "this" {
for_each = local.map
project = each.value.project
name = each.value.name
value = each.value.value
}
Комментарии:
1. ОБРАТИТЕ внимание, что многоточие является обязательной частью примера (а не просто псевдокодом «и так далее»). Это аргумент расширяющейся функции для Terraform.