Вышел Terraform 1.15. В этом релизе появились переменные в источниках модулей, механизм deprecation для переменных и output, функция
convert для явного приведения типов и нативная поддержка Windows ARM64. Разберём основные изменения.Динамические источники модулей
Раньше
source в блоке module принимал только статическую строку. Теперь можно использовать переменные. Для этого добавлен новый атрибут const у переменных. Он принимает true или false и указывает, что значение доступно уже на этапе terraform init:variable "folder" {
type = string
const = true
}После этого переменную можно подставлять в
source:module "zoo" {
source = "./${var.folder}"
}Важный момент —
const нельзя сочетать с sensitive или ephemeral. Если вы сошлётесь на что-то кроме const-переменной, Terraform выдаст ошибку при init.Deprecation переменных и output
Авторы модулей теперь могут помечать переменные и output как устаревшие через атрибут
deprecated. При обращении к такому элементу Terraform покажет предупреждение на этапе валидации.variable "bad" {
deprecated = "Please use 'good' instead, this variable will be removed"
}
output "old" {
value = "some_value"
deprecated = "Please use 'new' instead, this output will be removed"
}Логика работает на нескольких уровнях. Если кто-то передаёт значение в deprecated-переменную через CLI или переменные окружения, будет warning. Если модуль ссылается на deprecated output дочернего модуля внутри своего deprecated output, предупреждение не сработает. Но если deprecated output стоит на корневом уровне, это уже ошибка.
Такой подход позволяет авторам модулей плавно выводить старые интерфейсы из обращения.
Inline-приведение типов через convert
Новая функция
convert решает давнюю проблему с неявным приведением типов. Terraform обычно сам определяет типы, но в ряде случаев это работает некорректно. Например, {} интерпретируется как пустой object без атрибутов, а не как пустой map. Аналогично [] — это пустой tuple, а не list.convert позволяет явно указать нужный тип и создавать корректные нулевые значения для сложных коллекций. Это особенно полезно в условных выражениях, где ветки возвращают данные разных типов.Прочие изменения
Terraform 1.15 теперь собирается под Windows ARM64. Это актуально для владельцев Surface Pro, Windows Dev Kit 2023, а также для тех, кто запускает Windows-виртуалки на Mac M1/M2 через Parallels.
S3-бэкенд получил поддержку аутентификации через
aws login (AWS CLI v2.32.0+). Это значит, что можно использовать credentials из консоли AWS без долгоживущих access-ключей.У output-блоков появились type constraints — явные ограничения типа, аналогичные тем, что давно есть у input-переменных:
output "string" {
type = string
value = var.some_string
}В Terraform Test теперь разрешены функции внутри
mock-блоков. Можно генерировать тестовые данные через uuid() или format(), что упрощает мокирование ресурсов с конкретными форматами ID.Для Stacks добавлены validation-блоки в переменных с атрибутами
condition и error_message. Это помогает ловить ошибки конфигурации на раннем этапе.Обнова за обновой выходит каждый день. Мы отбираем только самое важное для вас в нашей рассылке. 👉 Подпишитесь
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#пульс_индустрии
