Метаданные провайдера
В некоторых ситуациях провайдеру полезно предоставить интерфейс, через который модули могут передавать ему информацию, не связанную с ресурсами в модуле, но относящуюся к отдельному модулю.
Метаданные провайдера позволяют провайдеру объявить ожидаемые поля метаданных, которые отдельные модули могут заполнять независимо от конфигурации провайдера. Конфигурации провайдера часто используются совместно несколькими модулями, тогда как метаданные провайдера всегда относятся к конкретному модулю.
Метаданные провайдера предназначены главным образом для случаев, когда официальный модуль разрабатывается тем же поставщиком, который создал провайдер, с которым модуль должен работать. Это позволяет поставщику косвенно получать через провайдер статистику использования каждого модуля. Поэтому в этой документации тема рассматривается с точки зрения разработчика провайдера, а не разработчика модуля.
На этой странице рассматриваются технические подробности 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.10/internals/provider-meta/