Метаданные провайдера
В некоторых ситуациях провайдеру полезно предоставлять интерфейс, через который модули могут передавать ему информацию, не связанную с ресурсами в модуле, но относящуюся к отдельному модулю.
Метаданные провайдера позволяют провайдеру объявить ожидаемые поля метаданных, которые отдельные модули могут заполнять независимо от конфигурации провайдера. Конфигурации провайдеров часто используются несколькими модулями, а метаданные провайдера всегда относятся к конкретному модулю.
Метаданные провайдера предназначены главным образом для случаев, когда официальный модуль разрабатывает тот же поставщик, который создал предназначенный для работы с ним провайдер. Это позволяет поставщику косвенно получать через провайдер статистику использования каждого модуля. Поэтому в этой документации материал изложен с точки зрения разработчика провайдера, а не разработчика модуля.
На этой странице рассматриваются технические подробности OpenTofu. Для эффективного использования OpenTofu не обязательно разбираться в них. Здесь они приведены для авторов модулей и разработчиков провайдеров, работающих над расширенными функциями.
Эта функциональность пока считается экспериментальной. Всем, кто решит ею воспользоваться, следует согласовать это с командой OpenTofu, чтобы помочь команде понять, как используется эта функция, и убедиться, что их сценарий использования будет учтён по мере её развития.
Определение схемы
Прежде чем провайдер сможет получать информацию от модуля, он должен строго определить данные, которые может принимать. Для этого задайте свойство ProviderMeta в структуре schema.Provider. Оно работает аналогично конфигурации провайдера: это карта, в которой строкам сопоставлены значения schema.Schema, описывающие допустимое содержимое этих строк.
Использование данных
Когда OpenTofu вызывает ваш провайдер, вы можете использовать schema.ResourceData, которые уже применяются в функциях Create, Read и Update, чтобы получить переданные метаданные провайдера. Сначала определите структуру, соответствующую вашей схеме, а затем вызовите метод GetProviderSchema для вашего schema.ResourceData, передав указатель на переменную этого типа. Переменная будет заполнена метаданными провайдера. Если при разборе данных и заполнении структуры возникнет ошибка, метод вернёт её.
Указание данных в модулях
Чтобы включить данные в модули, создайте вложенный блок provider_meta в блоке terraform вашего модуля, указав имя провайдера, которому передаётся информация:
terraform {
provider_meta "my-provider" {
hello = "world"
}
}Блок provider_meta должен соответствовать схеме, определённой провайдером.
Управление версиями модулей
Любой модуль, использующий эту функциональность, должен убедиться, что передаваемые метаданные провайдера соответствуют схеме, определённой в провайдере, а используемая версия OpenTofu поддерживает метаданные провайдера. Поэтому рекомендуется указывать для таких модулей минимальную версию OpenTofu 0.13.0 или выше, а также минимальную версию каждого провайдера, для которого заданы метаданные: это должна быть первая версия провайдера с поддержкой используемой схемы.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/internals/provider-meta/