Провайдеры
OpenTofu использует плагины, называемые провайдерами, для взаимодействия с облачными провайдерами, SaaS-провайдерами и другими API.
В конфигурациях OpenTofu необходимо объявлять, какие провайдеры требуются, чтобы OpenTofu мог установить и использовать их. Кроме того, некоторым провайдерам требуется конфигурация (например, URL конечных точек или регионы облака), прежде чем их можно будет использовать.
Что делают провайдеры
Каждый провайдер добавляет набор типов ресурсов и/или источников данных, которыми может управлять OpenTofu.
Каждый тип ресурса реализуется провайдером; без провайдеров OpenTofu не может управлять никакой инфраструктурой.
Большинство провайдеров предназначены для конкретной инфраструктурной платформы (облачной или размещённой самостоятельно). Провайдеры также могут предлагать локальные инструменты для таких задач, как генерация случайных чисел для уникальных имён ресурсов.
Откуда берутся провайдеры
Провайдеры распространяются отдельно от OpenTofu, и у каждого провайдера собственный график выпусков и номера версий.
Публичный реестр OpenTofu — это основной каталог общедоступных провайдеров; в нём размещены провайдеры для большинства основных инфраструктурных платформ.
Документация по провайдерам
У каждого провайдера есть собственная документация с описанием его типов ресурсов и аргументов. Эту документацию можно найти в репозитории провайдера на GitHub; документация многих провайдеров также размещена в каталоге провайдеров публичного реестра OpenTofu.
Для документации по провайдерам указываются версии, поэтому важно обращаться к тегу или выпуску, соответствующему используемой вами версии.
Как использовать провайдеры
Провайдеры выпускаются отдельно от OpenTofu и имеют собственные номера версий. Для рабочих сред мы рекомендуем ограничивать допустимые версии провайдеров в блоке требований к провайдерам конфигурации, чтобы tofu init не устанавливал более новые версии провайдера, несовместимые с конфигурацией.
Чтобы использовать ресурсы определённого провайдера, необходимо включить в конфигурацию некоторые сведения о нём. Подробности см. на следующих страницах:
-
Требования к провайдерам — описание того, как объявлять провайдеры, чтобы OpenTofu мог их устанавливать.
-
Конфигурация провайдеров — описание того, как настраивать параметры провайдеров.
-
Файл блокировки зависимостей — описание дополнительного файла HCL, который можно включить в конфигурацию, чтобы указать OpenTofu всегда использовать определённый набор версий провайдеров.
Установка провайдеров
-
TACOS (программное обеспечение для автоматизации и совместной работы с TF) устанавливают провайдеры при каждом запуске.
-
OpenTofu CLI находит и устанавливает провайдеры при инициализации рабочего каталога. Он может автоматически загружать провайдеры из реестра провайдеров или устанавливать их из локального зеркала или кэша. Если вы используете постоянный рабочий каталог, его необходимо повторно инициализировать при каждом изменении провайдеров в конфигурации.
Чтобы сэкономить время и трафик, OpenTofu CLI поддерживает необязательный кэш плагинов. Его можно включить с помощью параметра
plugin_cache_dirв файле конфигурации CLI.
Чтобы OpenTofu всегда устанавливал одни и те же версии провайдеров для заданной конфигурации, с помощью OpenTofu CLI можно создать файл блокировки зависимостей и добавить его в систему контроля версий вместе с конфигурацией. Если файл блокировки присутствует, OpenTofu CLI и TACOS (программное обеспечение для автоматизации и совместной работы с TF) будут руководствоваться им при установке провайдеров.
Как найти провайдеры
Чтобы найти провайдеры для используемых вами инфраструктурных платформ, просмотрите публичный реестр OpenTofu.
Некоторые провайдеры в реестре разрабатываются и публикуются HashiCorp, некоторые публикуются разработчиками платформ, а некоторые — пользователями и волонтёрами.
Как разрабатывать провайдеры
Провайдеры пишутся на Go с использованием Terraform Plugin SDK. Дополнительные сведения о разработке провайдеров см. в документации по разработке плагинов.
Запуск приёмочных тестов с OpenTofu CLI
Для запуска приёмочных тестов с помощью OpenTofu требуются дополнительные действия. Перед запуском приёмочных тестов задайте следующие переменные среды:
TF_ACC_TERRAFORM_PATH="/path/to/opentofu" TF_ACC_PROVIDER_NAMESPACE="hashicorp" TF_ACC_PROVIDER_HOST="registry.opentofu.org"
Известные отличия
Эфемерные ресурсы в выводе плана
OpenTofu включает эфемерные ресурсы с действием open в resource_changes вывода плана в формате JSON. Это необходимо внутри системы для построения графа выполнения apply при запуске tofu apply <planfile>.
Внутренняя проверка OpenTofu на пустоту плана правильно игнорирует действия open — поэтому в выводе CLI будет указано «Изменений нет», а -detailed-exitcode вернёт 0. Однако фреймворк terraform-plugin-testing считает любую запись в resource_changes признаком непустого плана, что может приводить к сбоям приёмочных тестов, если присутствуют эфемерные ресурсы.
Рекомендуемый обходной путь — условно задавать ExpectNonEmptyPlan при запуске в OpenTofu. Сначала добавьте вспомогательную функцию для определения OpenTofu:
// UsingOpenTofu reports whether the acceptance test binary is OpenTofu.
// OpenTofu includes ephemeral resource "open" actions in the JSON plan's
// resource_changes, which causes terraform-plugin-testing to consider the
// plan non-empty. See: https://github.com/opentofu/opentofu/issues/3781
func UsingOpenTofu() bool {
return strings.HasSuffix(os.Getenv("TF_ACC_TERRAFORM_PATH"), "tofu")
}Затем добавьте этот код к каждому шагу теста, который включает эфемерные ресурсы:
{
Config: testConfig,
ExpectNonEmptyPlan: UsingOpenTofu(),
},Если вы запускаете приёмочные тесты и в OpenTofu, и в Terraform, можно использовать SkipFunc, чтобы определить отдельные шаги для каждого из них:
isTofu := UsingOpenTofu()
// Step for OpenTofu
{
Config: testConfig,
ExpectNonEmptyPlan: true,
SkipFunc: func() (bool, error) {
return !isTofu, nil
},
},
// Step for Terraform
{
Config: testConfig,
ExpectNonEmptyPlan: false,
SkipFunc: func() (bool, error) {
return isTofu, nil
},
},
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/providers/