Spec-Zone.ru › OpenTofu 1.11

Пакеты модулей в реестрах OCI

OpenTofu поддерживает установку пакетов модулей из различных источников, в том числе из репозиториев реестров, реализующих протокол OCI Distribution.

Вы можете настроить OpenTofu для установки модуля из репозитория OCI, используя схему адреса источника oci::

Блок кода
module "example" {
  source = "oci://example.com/repository-name"
}

Дополнительные сведения о выборе артефактов OCI для установки см. в документации по источникам модулей. На остальной части этой страницы рассматривается создание подходящих артефактов OCI для использования в качестве пакетов модулей OpenTofu.

Обязательное содержимое репозитория OCI​

Артефакт OCI, выбранный адресом источника модуля oci:, должен соответствовать определённым требованиям как к метаданным манифеста, так и к блобу, содержащему пакет модуля.

Выбранный тег или дайджест должен соответствовать стандартному манифесту образа OCI, у которого свойство artifactType имеет значение "application/vnd.opentofu.modulepkg".

Массив layers манифеста образа должен содержать ровно один дескриптор, у которого mediaType имеет значение archive/zip и который ссылается на корректный архив .zip с содержимым пакета модуля.

Корневой каталог архива .zip соответствует корневому каталогу пакета модуля и поэтому содержит файлы конфигурации .tf, .tofu и т. д., описывающие модуль по умолчанию из пакета. Архив может дополнительно содержать подкаталоги с другими модулями, которые затем можно выбрать, используя стандартный синтаксис для модулей в подкаталогах пакета.

Если указанный адрес источника не содержит аргумент строки запроса tag или digest, OpenTofu попытается найти тег с именем latest. Кроме ограничений синтаксиса, установленных спецификацией OCI Distribution, OpenTofu не предполагает соблюдения каких-либо соглашений об именовании тегов.

Сборка и отправка манифестов пакетов модулей​

Установка и настройка ORAS​

Мы рекомендуем собирать и отправлять манифесты и блобы пакетов модулей с помощью инструмента командной строки, предлагаемого проектом ORAS.

Если вы впервые устанавливаете и используете ORAS и собираетесь отправлять данные в реестр OCI, требующий аутентификации, сначала получите учётные данные для этого репозитория с помощью oras login.

Создание архива .zip​

Содержимое пакета модуля представляется в артефакте OCI одним слоем в формате архива .zip.

Для создания архива .zip с исходным кодом модуля (файлами .tf/.tofu и т. д.), который вы собираетесь распространять, можно использовать любой подходящий инструмент. Например, инструмент zip, обычно доступный в системах Unix:

Блок кода
zip -r ../module-package.zip .

Эта команда создаёт или обновляет архив module-package.zip в родительском каталоге текущего рабочего каталога. В архив включаются все файлы из текущего рабочего каталога и его подкаталогов. Создание файла в родительском каталоге позволяет избежать включения zip-файла в него самого при повторном выполнении той же команды.

В следующем разделе для обозначения созданного вами архива .zip будет использоваться module-package.zip.

Отправка артефакта в удалённый репозиторий​

Команда oras push может автоматически создать подходящий манифест образа, отправить этот манифест и связанный с ним файл .zip в удалённый репозиторий OCI, а также создать или обновить в том же репозитории один или несколько тегов, ссылающихся на него.

Блок кода
oras push \
  --artifact-type=application/vnd.opentofu.modulepkg \
  example.com/repository-name:latest \
  module-package.zip:archive/zip

example.com/repository-name — адрес репозитория, в который нужно отправить артефакт. latest — имя используемого тега.

module-package.zip — имя архива .zip, созданного на предыдущем шаге. Суффикс :archive/zip указывает ORAS, какой тип носителя задать для этого файла в манифесте артефакта. OpenTofu не поддерживает другие типы носителей.

Параметр --artifact-type, указанный выше, необходимо использовать точно так, как показано, чтобы OpenTofu распознал этот артефакт как пакет модуля.

Адрес репозитория и тег, указанные выше, можно задать в адресе источника блока module следующим образом:

Блок кода
module "example" {
  source = "oci://example.com/repository-name?tag=latest"
}

Если вы выбрали имя тега latest, как показано здесь, аргумент tag можно опустить и указать только oci://example.com/repository-name, поскольку OpenTofu по умолчанию использует тег «latest».

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/cli/oci_registries/module-package/

Spec-Zone.ru

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