Команда: init
Команда tofu init инициализирует рабочий каталог, содержащий файлы конфигурации OpenTofu. Это первая команда, которую следует выполнить после создания новой конфигурации OpenTofu или клонирования существующей конфигурации из системы контроля версий. Эту команду безопасно выполнять несколько раз.
Использование
Использование: tofu init [options]
Эта команда выполняет несколько шагов инициализации, чтобы подготовить текущий рабочий каталог к использованию с OpenTofu. Подробнее об этих шагах рассказано в разделах ниже, но в большинстве случаев нет необходимости разбираться в каждом из них.
Эту команду всегда безопасно выполнять несколько раз, чтобы привести рабочий каталог в соответствие с изменениями конфигурации. Хотя последующие запуски могут завершиться ошибками, эта команда никогда не удалит существующую конфигурацию или состояние.
Для этой команды необходимо задать значения переменных, используемых в блоках источников модулей и конфигурации серверной части. Дополнительные сведения см. в разделе Присваивание значений переменным корневого модуля.
Общие параметры
Следующие параметры применяются ко всем этапам инициализации или к нескольким из них:
-
-input=trueЗапрашивать ввод, если он необходим. Если значение — false, команда завершится ошибкой, когда потребуется ввод. -
-lock=falseОтключить блокировку файлов состояния во время операций, связанных с состоянием. -
-lock-timeout=<duration>Изменить время ожидания OpenTofu при попытке получить блокировку состояния. По умолчанию используется0s(ноль секунд), поэтому команда немедленно завершится ошибкой, если блокировка уже удерживается другим процессом. -
-no-colorОтключить цветовые коды в выводе команды. -
-upgradeОбновить модули и плагины на соответствующих этапах установки. Подробнее см. в разделах ниже. -
-jsonВыводить данные в машиночитаемом формате JSON, подходящем для интеграции с текстовыми редакторами и другими автоматизированными системами. Всегда отключает цвета. -
-json-into=out.json— Выводит те же данные, что и -json, но перенаправляет их в файл. Это позволяет одновременно сохранять как удобные для чтения человеком, так и машиночитаемые журналы. -
-var 'NAME=VALUE'— Задать значение одной входной переменной, объявленной в корневом модуле конфигурации. Используйте этот параметр несколько раз, чтобы задать значения нескольких переменных. Дополнительные сведения см. в разделе Входные переменные в командной строке. -
-var-file=FILENAME— Задать значения для произвольного количества входных переменных, объявленных в корневом модуле конфигурации, используя определения из файла «tfvars». Используйте этот параметр несколько раз, чтобы включить значения из нескольких файлов. -
-json— Включить вывод в формате машиночитаемого JSON-интерфейса. Это подразумевает-input=false, поэтому для продолжения необходимо задать значения всех переменных конфигурации. -
-json-into=out.json— Выводит те же данные, что и -json, но перенаправляет их в файл. Это позволяет одновременно сохранять как удобные для чтения человеком, так и машиночитаемые журналы.
Значения входных переменных корневого модуля можно задавать и другими способами, помимо параметров -var и -var-file. Дополнительные сведения см. в разделе Присваивание значений переменным корневого модуля.
Копирование исходного модуля
По умолчанию tofu init предполагает, что рабочий каталог уже содержит конфигурацию, и пытается инициализировать её.
При необходимости init можно запустить в пустом каталоге с параметром -from-module=MODULE-SOURCE. В этом случае указанный модуль будет скопирован в целевой каталог до выполнения любых других шагов инициализации.
Этот особый режим работы подходит для двух случаев:
-
Если указан источник в системе контроля версий, это позволяет одной командой получить конфигурацию из системы контроля версий и инициализировать для неё рабочий каталог.
-
Если источник указывает на конфигурацию примера, её можно скопировать в локальный каталог и использовать как основу для новой конфигурации.
Для регулярной работы рекомендуется отдельно получать конфигурацию из системы контроля версий с помощью её собственных команд. Так можно при необходимости передавать системе контроля версий дополнительные флаги и выполнять другие подготовительные действия (например, генерировать конфигурацию или активировать учётные данные) перед запуском tofu init.
Инициализация серверной части
Во время выполнения init в корневом каталоге конфигурации выполняется поиск конфигурации серверной части, после чего выбранная серверная часть инициализируется с использованием заданных параметров конфигурации.
Использование переменных в блоке конфигурации серверной части требует присваивания значений переменным корневого модуля при запуске tofu init.
Повторный запуск init для уже инициализированной серверной части обновит рабочий каталог с учётом новых параметров серверной части. Для обновления конфигурации серверной части необходимо указать -reconfigure или -migrate-state.
Параметр -migrate-state попытается скопировать существующее состояние в новую серверную часть; в зависимости от изменений могут появиться интерактивные запросы на подтверждение переноса состояний рабочих областей. Параметр -force-copy отключает эти запросы и отвечает «да» на вопросы о переносе. Включение -force-copy также автоматически включает параметр -migrate-state.
Параметр -reconfigure игнорирует любую существующую конфигурацию, предотвращая перенос имеющегося состояния.
Чтобы пропустить настройку серверной части, используйте -backend=false. Обратите внимание, что для выполнения некоторых других шагов инициализации требуется инициализированная серверная часть, поэтому рекомендуется использовать этот флаг, только если рабочий каталог уже был ранее инициализирован для определённой серверной части.
Параметр -backend-config=... можно использовать для частичной конфигурации серверной части в случаях, когда её параметры являются динамическими или конфиденциальными и поэтому не могут быть статически заданы в файле конфигурации.
Установка дочерних модулей
Во время выполнения init в конфигурации выполняется поиск блоков module, а исходный код указанных модулей загружается из расположений, заданных в аргументах source.
При повторном запуске init с уже установленными модулями будут установлены исходные файлы всех модулей, добавленных в конфигурацию после последнего запуска init, но уже установленные модули не изменятся. Используйте -upgrade, чтобы изменить это поведение и обновить все модули до последних доступных исходных версий.
Чтобы пропустить установку дочерних модулей, используйте -get=false. Обратите внимание, что некоторые другие шаги инициализации могут быть выполнены только после формирования полного дерева модулей, поэтому рекомендуется использовать этот флаг, только если рабочий каталог уже был ранее инициализирован вместе с дочерними модулями.
Установка плагинов
Большинство провайдеров OpenTofu публикуются отдельно от OpenTofu в виде плагинов. Во время выполнения init OpenTofu ищет в конфигурации прямые и косвенные ссылки на провайдеры и пытается установить соответствующие плагины.
Для провайдеров, опубликованных в общедоступном реестре OpenTofu или в стороннем реестре провайдеров, tofu init автоматически найдёт, загрузит и установит необходимые плагины провайдеров. Если вы не можете или не хотите устанавливать провайдеры из исходных реестров, можно настроить установку провайдеров OpenTofu с помощью параметров установки провайдеров в конфигурации CLI.
Дополнительные сведения о том, как указать необходимые провайдеры для каждого модуля, см. в разделе Требования к провайдерам.
После успешной установки OpenTofu записывает сведения о выбранных провайдерах в файл блокировки зависимостей. Этот файл следует добавить в систему контроля версий, чтобы при последующем запуске tofu init OpenTofu выбирал те же версии провайдеров. Используйте параметр -upgrade, если хотите, чтобы OpenTofu игнорировал файл блокировки зависимостей и рассматривал возможность установки более новых версий.
Изменить поведение плагинов tofu init можно с помощью следующих параметров:
-
-upgradeОбновить все ранее выбранные плагины до новейших версий, соответствующих ограничениям версий в конфигурации. В результате OpenTofu проигнорирует выбор, записанный в файле блокировки зависимостей, и установит новейшие доступные версии, соответствующие заданным ограничениям версий. -
-plugin-dir=PATH— Принудительно устанавливать плагины только из указанного каталога, как если бы он был настроен в качествеfilesystem_mirrorв конфигурации CLI. Если вы планируете регулярно использовать определённое файловое зеркало, рекомендуется настроить методы установки OpenTofu глобально. Параметр-plugin-dirможно использовать как разовое переопределение в исключительных ситуациях, например при тестировании локальной сборки разрабатываемого вами плагина провайдера. -
-lockfile=MODEЗадать режим файла блокировки зависимостей.
Допустимы следующие значения режима файла блокировки:
-
readonly: не вносить изменения в файл блокировки, но проверять контрольные суммы по уже записанным в нём данным. Несовместим с флагом-upgrade. Если вы обновляете файл блокировки с помощью сторонних инструментов управления зависимостями, может быть полезно явно управлять тем, когда он изменяется.
Запуск tofu init в автоматизированных системах
Командам, использующим OpenTofu как важную часть процесса управления изменениями и развёртывания, может быть полезно оркестрировать запуски OpenTofu с помощью автоматизации. Это позволяет обеспечить согласованность запусков и реализовать дополнительные возможности, например интеграцию с хуками системы контроля версий.
При запуске init в такой среде следует учитывать некоторые особенности, в том числе возможность локально сделать плагины доступными, чтобы избежать их повторной установки.
Указание другого каталога конфигурации
Если в вашем рабочем процессе необходимо переопределять каталог корневого модуля, используйте вместо этого глобальный параметр -chdir. Он работает со всеми командами и обеспечивает единообразный поиск OpenTofu всех файлов, которые обычно читаются или записываются в текущем рабочем каталоге, в указанном каталоге.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/cli/commands/init/