Как управлять несколькими версиями 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 поможет каждому успешно его использовать.
Оригинал