Как управлять несколькими версиями OpenTofu с помощью Tofuenv

Как управлять несколькими версиями OpenTofu с помощью Tofuenv

9 января 2024 г.

Когда мы работаем только с одним проектом OpenTofu, мы устанавливаем нужную версию и не имеем никаких проблем. Но когда мы начинаем работать с несколькими проектами с разными версиями OpenTofu — у нас беда.

Как можно было решить эту проблему раньше? Мы скачали нужную версию OpenTofu и поместили ее где-то в $PATH. После этого мы переименовали скачанный файл и использовали его примерно так:

$ tofu-1.6.0-rc1 -version
OpenTofu v1.6.0-rc1
on darwin_amd64

Но переключаться между версиями сложно и неудобно, и нужно помнить, какую версию OpenTofu нужно каждый раз использовать.

Здесь нам поможет tofuenv. tofuenv — менеджер версий OpenTofu. Это позволяет нам легко устанавливать версии, переключаться между ними и устанавливать конкретную версию для конкретного репозитория.

Установка tofuenv

tofuenv можно установить во все основные операционные системы, такие как MacOS, Linux и Windows.

Мы можем использовать Brew для установки tofuenv на Mac:

$ brew tap tofuutils/tap
$ brew install tofuenv

В Linux мы можем вручную установить tofuenv.

  • Извлеките tofuenv по любому пути (вот ${HOME}/.tofuenv)
$ git clone --depth=1 https://github.com/tofuutils/tofuenv.git ~/.tofuenv
  • Добавьте ~/.tofuenv/bin в ваш $PATH любым удобным для вас способом:

баш:

bash $ echo 'export PATH="$HOME/.tofuenv/bin:$PATH"' >> ~/.bash_profile

зш:

bash $ echo 'export PATH="$HOME/.tofuenv/bin:$PATH"' >> ~/.zprofile

ИЛИ вы можете сделать символические ссылки для сценариев tofuenv/bin/* в путь, который уже добавлен в ваш $PATH (например, /usr/local/ bin) Только для OSX/Linux!

bash $ ln -s ~/.tofuenv/bin/* /usr/local/bin

В Ubuntu/Debian для касания /usr/local/bin может потребоваться доступ к sudo, но вы можете создать ${HOME}/bin или ${HOME}/. local/bin, и при следующем входе в систему он будет добавлен в сеанс $PATH или при запуске . ${HOME}/.profile он будет добавлен в $PATH текущего сеанса оболочки.

bash $ mkdir -p ~/.local/bin/ $ . ~/.профиль $ ln -s ~/.tofuenv/bin/* ~/.local/bin $ который tofuenv

Запустите tofuenv, чтобы проверить установку и доступные параметры:

$ tofuenv
tofuenv 1.0.3
Usage: tofuenv <command> [<options>]

Commands:
   install       Install a specific version of OpenTofu
   use           Switch a version to use
   uninstall     Uninstall a specific version of OpenTofu
   list          List all installed versions
   list-remote   List all installable versions
   version-name  Print current version of OpenTofu
   init          Update environment to use tofuenv correctly.
   pin           Write the current active version to ./.opentofu-version

В случае возникновения каких-либо проблем вы можете обратиться к официальной документации в репозитории tofuenv на github.

Установка OpenTofu с помощью tofuenv

После установки tofuenv мы можем установить opentofu следующим образом.

Чтобы установить конкретную версию opentofu, используйте следующую команду:

$ tofuenv install 1.6.0-rc1

Чтобы установить последнюю стабильную версию, мы можем использовать определенное слово latest:

$ tofuenv install latest

Но в связи с тем, что на момент написания статьи OpenTofu не имеет стабильной версии, установка через latest word не работает.

В любом случае, мы можем установить последнюю доступную версию OpenTofu 1.6:

$ tofuenv install latest:1.6
tofuenv install latest:1.6
Installing OpenTofu v1.6.0-rc1
Downloading release tarball from https://github.com/opentofu/opentofu/releases/download/v1.6.0-rc1/tofu_1.6.0-rc1_darwin_amd64.zip
########################################################################################################################################################### 100.0%
Downloading SHA hash file from https://github.com/opentofu/opentofu/releases/download/v1.6.0-rc1/tofu_1.6.0-rc1_SHA256SUMS
Archive:  /var/folders/nb/k6bv49gd4pd9kyvwwn519_2m0000gn/T/tofuenv_download.XXXXXX.fqdxfWoz/tofu_1.6.0-rc1_darwin_amd64.zip
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-rc1/CHANGELOG.md  
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-rc1/LICENSE  
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-rc1/README.md  
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-rc1/tofu  
Installation of tofu v1.6.0-rc1 successful. To make this your default version, run 'tofuenv use 1.6.0-rc1'

На данный момент последней доступной версией OpenTofu 1.6 является 1.6.0-rc1, и по этой причине она была установлена ​​tofuenv.

Примечание. Если в пути присутствует shasum, tofuenv проверит загрузку по опубликованному OpenTofu хешу sha256. Также подпись GPG будет добавлена ​​для проверки, как только OpenTofu ее поддержит.

Перечислить версии OpenTofu

С помощью tofuenv мы можем перечислить локально установленные версии и удаленные версии, доступные для установки.

Чтобы просмотреть локально установленные версии, выполните следующую команду:

$ tofuenv list
  1.6.0-alpha1
* 1.6.0-rc1 (set by /usr/local/Cellar/tofuenv/1.0.3/version)

Звездочкой отмечена используемая в данный момент версия.

Чтобы просмотреть удаленные версии, выполните следующую команду:

$ tofuenv list-remote
1.6.0-rc1
1.6.0-beta5
1.6.0-beta4
1.6.0-beta3
1.6.0-beta2
1.6.0-beta1
1.6.0-alpha5
1.6.0-alpha4
1.6.0-alpha3
1.6.0-alpha2
1.6.0-alpha1

OpenTofu размещает двоичные файлы в GitHub, а GitHub имеет строгое правило ограничения скорости для неавторизованных пользователей. Из-за этого вы можете обнаружить ошибку 403 или ошибку «Превышены пределы скорости GitHub». Вы можете установить переменную среды TOFUENV_GITHUB_TOKEN со своим собственным токеном GitHub для аутентификации с помощью API GitHub и значительно увеличить ограничения скорости.

Переключение используемой версии

Чтобы переключаться между версиями, мы можем использовать несколько методов.

Прежде всего, с помощью параметра use:

$ tofuenv use 1.6.0-alpha1
Switching default version to v1.6.0-alpha1
Default version (when not overridden by .opentofu-version or TOFUENV_TOFU_VERSION) is now: 1.6.0-alpha1

По умолчанию для переменной среды TOFUENV_AUTO_INSTALL установлено значение true, и если версия 1.6.0-alpha1 OpenTofu недоступна локально, она будет загружена и использована автоматически:

$ tofuenv use 1.6.0-alpha2
No installed versions of opentofu matched '^1.6.0-alpha2$'. Trying to install a matching version since TOFUENV_AUTO_INSTALL=true
Installing OpenTofu v1.6.0-alpha2
Downloading release tarball from https://github.com/opentofu/opentofu/releases/download/v1.6.0-alpha2/tofu_1.6.0-alpha2_darwin_amd64.zip
########################################################################################################################################################### 100.0%
Downloading SHA hash file from https://github.com/opentofu/opentofu/releases/download/v1.6.0-alpha2/tofu_1.6.0-alpha2_SHA256SUMS
Archive:  /var/folders/nb/k6bv49gd4pd9kyvwwn519_2m0000gn/T/tofuenv_download.XXXXXX.3DyehSoJ/tofu_1.6.0-alpha2_darwin_amd64.zip
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-alpha2/CHANGELOG.md  
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-alpha2/LICENSE  
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-alpha2/README.md  
  inflating: /usr/local/Cellar/tofuenv/1.0.3/versions/1.6.0-alpha2/tofu  
Installation of tofu v1.6.0-alpha2 successful. To make this your default version, run 'tofuenv use 1.6.0-alpha2'
Switching default version to v1.6.0-alpha2
Default version (when not overridden by .opentofu-version or TOFUENV_TOFU_VERSION) is now: 1.6.0-alpha2

Второй вариант — использовать файл .opentofu-version. Если этот файл присутствует в каталоге и содержит нужную версию, он будет использован автоматически:

project1$ tofu -version
OpenTofu v1.6.0-rc1
on darwin_amd64
project1$ cat .opentofu-version 
1.6.0-rc1

project1$ cd ../project2
project2$ tofu -version
OpenTofu v1.6.0-alpha1
on darwin_amd64
project2$ cat .opentofu-version 
1.6.0-alpha1

Этот файл можно создать вручную, например:

$ echo 1.6.0-alpha1 > .opentofu-version

Или с помощью специальной команды pin из tofuenv. Эта команда сохранит используемую в данный момент версию opentofu в файл в текущем каталоге:

$ tofu -version
OpenTofu v1.6.0-rc1
on darwin_amd64

$ tofuenv pin
Pinned version by writing "1.6.0-rc1" to ./.opentofu-version

Удалить ненужные версии

Для очистки ненужной установленной версии мы можем использовать команду uninstall:

$ tofuenv uninstall 1.6.0-rc1
Uninstall OpenTofu v1.6.0-rc1
OpenTofu v1.6.0-rc1 is successfully uninstalled

В заключение

OpenTofu — отличная альтернатива Terraform с открытым исходным кодом. Наша команда (я, Александр Шаров и Анастасия Козлова ) считает, что OpenTofu займет решающее место на рынке, а tofuenv поможет каждому успешно его использовать.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE