Terraform: инфраструктура на уровне кода | страница 109
variable "hero_thousand_faces" {
description = "map"
type = map(string)
default = {
neo = "hero"
trinity = "love interest"
morpheus = "mentor"
}
}
output "upper_roles" {
value = {for name, role in var.hero_thousand_faces : upper(name) => upper(role)}
}
При выполнении этот код возвращает такой вывод:
upper_roles = {
"MORPHEUS" = "MENTOR"
"NEO" = "HERO"
"TRINITY" = "LOVE INTEREST"
}
Циклы с использованием строковой директивы for
Ранее в этой книге вы узнали о строковой интерполяции, которая позволяет ссылаться на код Terraform внутри строки:
"Hello, ${var.name}"
С помощью строковых директив подобный синтаксис можно использовать и для управляющих конструкций (вроде циклов for и выражения if), но вместо знака доллара (${…}) перед фигурными скобками указывается знак процента (%{…}).
Строковая директива for имеет следующий синтаксис:
%{ for
COLLECTION — список или ассоциативный массив, который нужно перебрать, ITEM — имя локальной переменной, которое назначается каждому элементу COLLECTION, а BODY — это то, что выводится на каждой итерации (здесь можно ссылаться на ITEM). Например:
variable "names" {
description = "Names to render"
type = list(string)
default = ["neo", "trinity", "morpheus"]
}
output "for_directive" {
value = < %{ for name in var.names } ${name} %{ endfor } EOF } Выполнив terraformapply, вы получите следующий вывод: $ terraform apply Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: for_directive = neo trinity morpheus Обратите внимание на дополнительные символы перехода на новую строку. В строковой директиве можно указать маркер ~, чтобы удалить все пробельные символы (пробелы и перенос строки) перед ней (если маркер находится в начале директивы) или после нее (если маркер находится в конце директивы): output "for_directive_strip_marker" { value = < %{~ for name in var.names } ${name} %{~ endfor } EOF } Эта обновленная версия дает такой вывод: for_directive_strip_marker = neo trinity morpheus Условные выражения Как и циклы, условные выражения в Terraform бывают нескольких видов, каждый из которых рассчитан немного на другой сценарий использования. •Параметр count для условных ресурсов. • Выраженияfor_eachиfor для условных ресурсов и их вложенных блоков. • Строковая директива if для условных выражений внутри строк. Рассмотрим их все по очереди. Условные выражения с использованием параметра count