Terraform: инфраструктура на уровне кода | страница 108
[for :
LIST — это список, который нужно перебрать, ITEM — имя локальной переменной, которое будет назначено каждому элементу списка, а OUTPUT — выражение, которое каким-то образом преобразует ITEM. Например, вот код Terraform для перевода списка имен в var.names в верхний регистр:
variable "names" {
description = "A list of names"
type = list(string)
default = ["neo", "trinity", "morpheus"]
}
output "upper_names" {
value = [for name in var.names : upper(name)]
}
Если выполнить для этого кода команду terraformapply, получится следующий вывод:
$ terraform apply
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
upper_names = [
"NEO",
"TRINITY",
"MORPHEUS",
]
Как и с абстракциями списков в Python, вы можете задать выражение для фильтрации полученного результата:
variable "names" {
description = "A list of names"
type = list(string)
default = ["neo", "trinity", "morpheus"]
}
output "short_upper_names" {
value = [for name in var.names : upper(name) if length(name) < 5]
}
Выполнив terraformapply для этого кода, вы получите следующее:
short_upper_names = [
"NEO",
]
Выражение for в Terraform также поддерживает циклический перебор ассоциативных массивов с использованием такого синтаксиса:
[for
MAP — это ассоциативный массив, который нужно перебрать, KEY и VALUE — имена локальных переменных, которые назначаются каждой паре «ключ — значение» в MAP, а OUTPUT — выражение, которое каким-то образом преобразует KEY и VALUE. Например:
variable "hero_thousand_faces" {
description = "map"
type = map(string)
default = {
neo = "hero"
trinity = "love interest"
morpheus = "mentor"
}
}
output "bios" {
value = [for name, role in var.hero_thousand_faces : "${name} is the ${role}"]
}
Если выполнить terraformapply для этого кода, получится следующее:
map_example = [
"morpheus is the mentor",
"neo is the hero",
"trinity is the love interest",
]
Выражение for может вернуть ассоциативный массив вместо списка, используя следующий синтаксис:
# Циклический перебор списков
[for
# Циклический перебор ассоциативных массивов
{for
Разница лишь в том, что: а) выражение помещается в фигурные скобки вместо прямоугольных; б) на каждой итерации выводится не только значение, но еще и ключ, отделенный от него стрелкой. Например, так можно перевести в верхний регистр все ключи и значения ассоциативного массива: