Spec-Zone.ru › OpenTofu 1.10

Что нового в 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API