Что нового в OpenTofu 1.10?
OpenTofu 1.10 значительно улучшает распространение и управление кодом инфраструктуры: добавлена поддержка реестров OCI, встроенная блокировка состояния в S3 и расширенные возможности наблюдения благодаря трассировке OpenTelemetry.
На этой странице описаны наиболее важные изменения в OpenTofu 1.10:
- Поддержка реестров OCI
- Встроенная блокировка состояния в S3
- Трассировка OpenTelemetry (экспериментальная функция)
- Файлы целевых и исключаемых ресурсов
- Глобальная блокировка кэша провайдеров
- Поддержка устаревания (экспериментальная функция)
- Усовершенствованные блоки moved и removed
- Внешние поставщики ключей
- Несовместимые изменения
- Прочие улучшения
- Исправления ошибок
Поддержка реестров OCI
Теперь OpenTofu может использовать реестры OCI (Open Container Initiative) для распространения провайдеров и модулей. Благодаря этому для компонентов инфраструктуры как кода можно использовать имеющуюся инфраструктуру реестров контейнеров.
Настройте зеркала провайдеров в реестрах OCI в конфигурации CLI:
provider_installation {
oci_mirror {
repository_template = "example.com/opentofu-providers/${namespace}/${type}"
include = ["registry.opentofu.org/*/*"]
}
}Используйте пакеты модулей из реестров OCI напрямую как новый тип источника модуля:
module "vpc" {
source = "oci://example.com/terraform-modules/vpc/aws"
}Эта функция особенно полезна в изолированных от сети средах и организациях, которые хотят использовать уже имеющуюся инфраструктуру реестров контейнеров.
Подробнее о форматах артефактов OCI в OpenTofu и о том, как создавать собственные артефакты, читайте в разделе Интеграция с реестрами OCI.
Встроенная блокировка состояния в S3
Теперь бэкенд S3 поддерживает встроенную блокировку состояния и не требует DynamoDB, что упрощает инфраструктуру и снижает затраты.
terraform {
backend "s3" {
bucket = "my-opentofu-state"
key = "prod/opentofu.tfstate"
region = "us-east-1"
use_lockfile = true # Enable native S3 locking
}
}Эта функция использует условную запись в S3 и обеспечивает надежную блокировку состояния, используя только ваш сегмент S3. Переход с блокировки на основе DynamoDB не представляет сложности: на переходный период поддерживается одновременное использование обоих механизмов блокировки. Подробности см. в документации по бэкенду S3.
Трассировка OpenTelemetry (экспериментальная функция)
Отлаживайте и оптимизируйте операции OpenTofu с помощью встроенной поддержки OpenTelemetry. По умолчанию трассировка отключена для обеспечения конфиденциальности.
Включите трассировку, задав переменные окружения:
export OTEL_TRACES_EXPORTER=otlp export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 export OTEL_EXPORTER_OTLP_INSECURE=true
После этого OpenTofu будет отправлять трассировки в настроенный вами сборщик (например, Jaeger или Grafana Tempo), помогая выявлять узкие места производительности и отлаживать сложные операции. Подробнее см. в документации по трассировке.
Обратите внимание: данные телеметрии не отправляются в OpenTofu или какие-либо внешние сервисы, если вы явно не настроите такую отправку.
Файлы целевых и исключаемых ресурсов
Новые параметры -target-file и -exclude-file позволяют управлять выбором целевых ресурсов с помощью файлов, отслеживаемых системой контроля версий:
tofu plan -target-file=targets/production.txt tofu apply -exclude-file=excludes/experimental.txt
Формат файла прост: один адрес ресурса в строке; поддерживаются комментарии:
# Critical infrastructure components module.networking.aws_vpc.main module.networking.aws_subnet.public[*] # Database infrastructure module.database.aws_db_instance.primary
Эта функция отлично подходит для конвейеров CI/CD, поэтапного развертывания и совместной работы в команде.
Глобальная блокировка кэша провайдеров
Теперь несколько одновременно выполняющихся операций OpenTofu могут безопасно использовать общий кэш провайдеров, предотвращая повреждение данных и конфликты в средах CI/CD и при использовании таких инструментов, как Terragrunt.
Включите глобальный кэш с помощью:
export TF_PLUGIN_CACHE_DIR=/path/to/shared/cache
Блокировка на уровне файловой системы гарантирует, что в каждый момент времени только один процесс может изменять провайдер, а остальные корректно ожидают своей очереди. Благодаря этому кэш провайдеров подходит для масштабных параллельных операций.
Подробнее об использовании глобального кэша провайдеров читайте в документации по кэшу провайдеров.
Поддержка устаревания (экспериментальная функция)
Теперь авторы модулей могут помечать переменные и выходные значения как устаревшие, помогая пользователям постепенно переходить на новые API:
variable "instance_type" {
type = string
deprecated = "Use var.compute_type instead"
}
output "instance_ip" {
value = aws_instance.main.public_ip
deprecated = "Use output.instance_details for more information"
}При использовании устаревших функций пользователи будут видеть понятные предупреждения, что упростит развитие модулей.
Усовершенствованные блоки moved и removed
Блок moved теперь поддерживает перенос ресурсов между типами, включая встроенную поддержку переноса из null_resource в terraform_data:
moved {
from = null_resource.example
to = terraform_data.example
}Блок removed теперь поддерживает правила жизненного цикла и обработчики подготовки ресурсов:
removed {
from = aws_instance.legacy
lifecycle {
destroy = false
}
}Эти улучшения делают рефакторинг инфраструктуры более гибким и функциональным. Подробнее см. в документации по рефакторингу.
Внешние поставщики ключей
Шифрование состояния теперь полностью поддерживает внешних поставщиков ключей, что позволяет интегрировать предпочитаемые вами инструменты управления секретами:
terraform {
encryption {
key_provider "external" "password_manager" {
command = ["op", "read", "op://opentofu/stateencryption"]
}
method "aes_gcm" "state" {
keys = key_provider.external.password_manager
}
state {
method = method.aes_gcm.state
}
}
}Для повышения безопасности можно также объединять поставщиков ключей в цепочку. Подробнее см. в документации по шифрованию состояния.
Несовместимые изменения
Требования к платформам
- Linux: теперь требуется ядро версии 3.2 или новее
- macOS: теперь требуется macOS 11 (Big Sur) или новее
- Windows: более консервативная обработка символических ссылок
Образ Docker
Образ ghcr.io/opentofu/opentofu больше не поддерживается в качестве базового. Варианты замены см. в разделе сборка собственного образа.
Бэкенд PostgreSQL
Механизм блокировки изменился. Не следует одновременно использовать OpenTofu 1.10 и более ранние версии с одной базой данных PostgreSQL, поскольку реализация блокировки изменилась. Использование разных версий может привести к конфликтующим операциям записи и потере данных.
Прочие улучшения
- Функция
elementтеперь поддерживает отрицательные индексы:element(list, -1)возвращает последний элемент - Добавлен новый флаг
-conciseдля более лаконичного вывода при автоматизации - Бэкенд PostgreSQL поддерживает пользовательские имена таблиц для конфигураций с несколькими проектами
- Бэкенд HTTP теперь поддерживает принудительную разблокировку
- Повышена производительность установки провайдеров
- Улучшены сообщения об ошибках преобразования типов
- Добавлены встроенные функции провайдеров:
-
provider::terraform::decode_tfvars— декодирует содержимое файла TFVars в объект -
provider::terraform::encode_tfvars— кодирует объект в строку в формате TFVars -
provider::terraform::encode_expr— кодирует выражение в корректный синтаксис OpenTofu
-
- В сообщениях об ошибках, связанных с неизвестными значениями в
countиfor_each, OpenTofu теперь рекомендует использовать-excludeвместо-target
Исправления ошибок
- Исправлен сбой при проверке имени провайдера в блоке
provider_meta - Исправлена ошибка бэкенда PostgreSQL при создании рабочих пространств в условиях параллельных операций
- Исправлена обработка нулевых значений в функциях
element,sliceиvalues - Устранены проблемы взаимодействия шифрования состояния с бэкендами
- Улучшена генерация блоков импорта
- Улучшена обработка ошибок установки провайдеров
- Исправлены проблемы графа зависимостей, связанные с блоками импорта
Полный список изменений см. в полном журнале изменений.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.10/intro/whats-new/