Команда: providers lock
Команда tofu providers lock (по умолчанию) обращается к вышестоящим реестрам, чтобы записать сведения о зависимостях провайдеров в файл блокировки зависимостей.
Обычно файл блокировки зависимостей обновляется как побочный эффект обычной установки провайдеров при выполнении tofu init, однако в некоторых случаях такого автоматического подхода может быть недостаточно:
-
Если вы запускаете OpenTofu в среде, где используются альтернативные способы установки провайдеров, например зеркала в файловой системе или сети, обычная установка провайдера не будет обращаться к исходному реестру этого провайдера, и поэтому OpenTofu не сможет получить все возможные контрольные суммы пакетов для выбранных версий провайдеров.
Если с помощью
tofu lockзаписать официальные контрольные суммы выпуска провайдера в файл блокировки зависимостей, последующие запускиtofu initбудут проверять доступные в выбранном вами зеркале пакеты по ранее записанным официальным контрольным суммам. Это даст дополнительную уверенность в том, что зеркало предоставляет именно те пакеты провайдера, которые заявляет. -
Если ваша команда запускает OpenTofu на нескольких платформах (например, и в Windows, и в Linux), а вышестоящий реестр провайдера не может предоставить подписанные контрольные суммы с использованием новейшей схемы хеширования, последующие запуски OpenTofu на других платформах могут добавить в файл блокировки дополнительные контрольные суммы. Этого можно избежать, заранее добавив хеши для всех планируемых к использованию платформ с помощью команды
tofu providers lock.
Использование
Использование: tofu providers lock [options] [providers...]
Использование переменных в источниках модулей требует присваивания значений переменным корневого модуля при запуске tofu providers lock.
Эта команда принимает следующие общие параметры:
-
-var 'NAME=VALUE'— задаёт значение одной входной переменной, объявленной в корневом модуле конфигурации. Используйте этот параметр несколько раз, чтобы задать значения нескольких переменных. Дополнительные сведения см. в разделе Входные переменные в командной строке. -
-var-file=FILENAME— задаёт значения одной или нескольких входных переменных, объявленных в корневом модуле конфигурации, используя определения из файла «tfvars». Используйте этот параметр несколько раз, чтобы добавить значения из нескольких файлов.
Помимо параметров -var и -var-file, существует несколько других способов задать значения входных переменных в корневом модуле. Дополнительные сведения см. в разделе Присваивание значений переменным корневого модуля.
Если не указаны дополнительные аргументы командной строки, tofu providers lock проанализирует конфигурацию в текущем рабочем каталоге, чтобы определить все используемые ею провайдеры, получит необходимые сведения об этих провайдерах из их исходных реестров и обновит файл блокировки зависимостей, указав выбранную версию каждого провайдера и все контрольные суммы пакетов, защищённые криптографической подписью разработчика провайдера.
Команда tofu providers lock выводит сведения о полученных данных и о том, был ли каждый пакет подписан криптографической подписью, но не может автоматически проверить надёжность провайдеров и соответствие локальным системным политикам или применимым нормативным требованиям. Прежде чем фиксировать обновлённый файл блокировки в системе контроля версий, проверьте сведения о ключах подписи в выводе и убедитесь, что доверяете всем подписавшим.
Если указать в командной строке один или несколько адресов источников провайдеров, tofu providers lock ограничит работу только этими провайдерами, оставив записи блокировки для остальных провайдеров (если они есть) без изменений.
Настроить поведение по умолчанию можно с помощью следующих дополнительных параметров:
-
-fs-mirror=PATH— указывает OpenTofu искать пакеты провайдеров в заданном локальном каталоге зеркала файловой системы, а не в вышестоящих реестрах. Каталог должен иметь обычную структуру каталогов зеркала файловой системы. -
-net-mirror=URL— указывает OpenTofu искать пакеты провайдеров в заданной службе сетевого зеркала, а не в вышестоящих реестрах. Указанный URL должен соответствовать протоколу сетевого зеркала провайдеров OpenTofu. -
-platform=OS_ARCH— указывает платформу, на которой вы планируете работать с этой конфигурацией OpenTofu. OpenTofu проверит, что все провайдеры доступны для указанной платформы, и сохранит в файле блокировки достаточно контрольных сумм пакетов для поддержки как минимум указанных платформ.Используйте этот параметр несколько раз, чтобы включить контрольные суммы для нескольких целевых систем.
Имя целевой платформы состоит из названия операционной системы и архитектуры ЦП. Например,
linux_amd64выбирает операционную систему Linux, работающую на процессоре AMD64 или x86_64.Подробнее об этом параметре рассказывается в следующем разделе.
Указание целевых платформ
Например, в вашей среде могут быть разработчики, которые работают с конфигурацией OpenTofu на рабочих станциях под управлением Windows или macOS, а также автоматизированные системы, применяющие эту конфигурацию под управлением Linux.
В такой ситуации можно проверить, поддерживают ли все провайдеры все эти платформы, и заранее добавить в файл блокировки необходимые контрольные суммы, выполнив tofu providers lock и указав эти три платформы:
tofu providers lock \ -platform=windows_amd64 \ # 64-bit Windows -platform=darwin_amd64 \ # 64-bit macOS -platform=linux_amd64 # 64-bit Linux
(В примере выше для удобства чтения используется синтаксис переноса строк оболочки Unix. Если вы запускаете команду в Windows, поместите все аргументы в одну строку и удалите обратные косые черты и комментарии.)
Записи блокировки для внутренних провайдеров
Внутренний провайдер — это провайдер, который не опубликован в общедоступном реестре провайдеров OpenTofu, поскольку он разработан и используется только внутри определённой организации и распространяется через зеркало файловой системы или сети.
По умолчанию tofu providers lock предполагает, что все провайдеры доступны в реестре провайдеров OpenTofu, и пытается связаться с исходными реестрами, чтобы получить наиболее подробные сведения о пакетах провайдеров.
Чтобы создать запись блокировки для определённого провайдера, доступного только в локальном зеркале, можно использовать параметр командной строки -fs-mirror или -net-mirror, переопределив поведение по умолчанию, при котором команда обращается к исходному реестру провайдера:
tofu providers lock \ -fs-mirror=/usr/local/tofu/providers -platform=windows_amd64 \ -platform=darwin_amd64 \ -platform=linux_amd64 \ tf.example.com/ourcompany/ourplatform
(В примере выше для удобства чтения используется синтаксис переноса строк оболочки Unix. Если вы запускаете команду в Windows, поместите все аргументы в одну строку и удалите обратные косые черты.)
Поскольку приведённая выше команда содержит адрес источника провайдера tf.example.com/ourcompany/ourplatform, tofu providers lock попытается получить данные только об этом провайдере и оставит записи блокировки для всех остальных провайдеров без изменений. Если провайдеры доступны из разных источников, можно выполнить tofu providers lock несколько раз, каждый раз указывая другую группу провайдеров.
Параметры -fs-mirror и -net-mirror имеют то же значение, что и блоки filesystem_mirror и network_mirror в конфигурации способов установки провайдеров, но здесь указывается только один способ, чтобы явно задать источник сведений о контрольных суммах пакетов.
Обратите внимание: только исходный реестр может предоставлять официальные контрольные суммы, защищённые криптографической подписью первоначального разработчика. Поэтому записи блокировки, созданные на основе зеркал файловой системы или сети, будут охватывать только те платформы, которые вы запросили, а записанные контрольные суммы будут предоставлены зеркалом, а не являться официальными контрольными суммами исходного реестра. Если вы хотите убедиться, что записанные контрольные суммы подписаны первоначальным издателем провайдера, выполните эту команду без параметров -fs-mirror и -net-mirror, чтобы получить все сведения из исходных реестров.
При желании вы можете публиковать внутренние провайдеры во внутреннем реестре провайдеров. Это позволит блокировать версии и устанавливать такие провайдеры без специальных параметров или дополнительной настройки CLI. Дополнительные сведения см. в разделе Протокол реестра провайдеров.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/cli/commands/providers/lock/