Вариант использования
Я установил Terraform v0.11.13 через доморощенное пиво и, согласно рекомендациям terraform, хочу перейти на версию v0.11.14, прежде чем выполнять основное обновление до v0.12.0.
Эта проблема
Когда я запускаю brew upgrade terraform или загружаю пакет Mac с веб-сайта terraform, я думаю, что моя версия terraform немедленно обновляется до версии 0.12.0.
Итак, как я могу вместо этого перейти на v0.11.14?





Особенно, играя с бета-версиями Terraform 0.12, я научился любить тфенв.
После установки (через brew install tfenv в MacOS) это позволяет легко обнаружить, установить и активировать любую версию Terraform:
$ tfenv list-remote
0.12.0
0.12.0-rc1
0.12.0-beta2
0.12.0-beta1
0.12.0
0.11.14
...
$ tfenv install 0.11.14
[INFO] Installing Terraform v0.11.14
[INFO] Downloading release tarball from https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_darwin_amd64.zip
...
[INFO] Installation of terraform v0.11.14 successful
[INFO] Switching to v0.11.14
[INFO] Switching completed
Если вы хотите перейти на другую версию:
$ tfenv use 0.12.0
[INFO] Switching to v0.12.0
[INFO] Switching completed
Добавление файла .terraform-version заставляет tfenv автоматически переключаться на правильную версию для данного каталога, и он даже позаботится об автоматической установке правильной версии, если она еще не установлена.
Я получаю следующее: "Инициализация плагинов провайдера... - Поиск последней версии hashicorp/google... Ошибка: не удалось запросить доступные пакеты провайдеров"
если уже установлена последняя версия. Возможно, вам придется сначала отключить brew unlink terraform перед установкой определенной версии из tfenv. После установки введите tfenv use 0.12.30, чтобы использовать новую версию.
Для тех, кто хочет сделать то же самое, не используя доморощенный:
$ wget https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_linux_amd64.zip
$ unzip terraform_0.11.14_linux_amd64.zip
$ chmod +x terraform
$ sudo mv terraform /usr/local/bin/
$ terraform --version
Источник: https://titosoft.github.io/kvm/terraform-and-kvm/#installing-terraform
я получаю эту ошибку с вашим кодом -bash: /usr/local/bin/terraform: невозможно выполнить двоичный файл
простой, прямолинейный.
Помимо обычных решений, простой реализацией требуемой проблемы будет установка tfswitch. Он может менять версии терраформирования всего одной командой. Руководство по установке и использованию приведено в данном связь.
Примечание:
Вы не можете вернуться к предыдущим версиям после инициализации скрипта (terraform init).
Я использую TF с 0.6 и активно использую много разных версий на своей рабочей станции. Я делаю это с помощью direnv [https://direnv.net/], так как он был доступен уже довольно давно, и он хорошо работает для управления бинарной версией TF в каталоге, плюс он позволяет мне передавать env vars для каждого каталога в TF без особых хлопот.
Образец .envrc:
export AWS_PROFILE=prod
export PATH=/usr/local/terraform/terraform-0.12.20:$PATH
export TF_VAR_dd_api_key=REDACTED
export TF_VAR_dd_app_key=REDACTED
Когда я перехожу в каталог, содержащий этот .envrc, он не только помещает правильный двоичный файл TF в мой PATH, но также устанавливает мой профиль AWS и, в данном случае, некоторые ключи API DataDog.
Когда я хочу обновить TF, я убеждаюсь, что нужный двоичный файл помещен в правильное место, и редактирую .envrc, чтобы он находился в PATH. В идеале .envrc не должен передаваться на Github, поскольку у других людей могут быть другие настройки, и особенно ключи API не должны помещаться в репозиторий.
Я знаю, что это немного старомодно, но это прекрасно работает для меня.
Есть хорошая альтернатива тфенв, которой я пользуюсь уже несколько лет — tfswitch.
# MacOS
brew install warrensbox/tap/tfswitch
# Linux
curl -L https://raw.githubusercontent.com/warrensbox/terraform-switcher/release/install.sh | bash
tfswitch VERSION_NUMBER.version.tf..tfswitchrc, .terrafom-version — требует минимальной настройки и поддерживает bash, zsh и fish.В общем, отличный и простой помощник, рекомендую.
Простой и лучший способ сделать: -
# MacOS
brew install warrensbox/tap/tfswitch
# Linux
curl -L https://raw.githubusercontent.com/warrensbox/terraform-
switcher/release/install.sh | bash
затем используйте любую из команд, чтобы изменить версию-
1. tfswitch ==> you will see option to select version.
2. tfswitch 0.14.3 ==> this way
ashishkarpe@Ashishs-MacBook-Air terraform % brew install warrensbox/tap/tfswitch ==> Нажатие warrensbox/tap Клонирование в '/opt/homebrew/Library/Taps/warrensbox/homebrew-tap'... remote: Перечисление объектов: 549 , Готово. удаленный: Подсчет объектов: 100% (107/107), выполнено. remote: Сжатие объектов: 100% (106/106), готово. удаленный: Всего 549 (дельта 49), повторно использовано 5 (дельта 1), повторно использовано 442 объекта получения: 100% (549/549), 69,88 КиБ | 1,89 МБ/с, готово. Разрешение дельт: 100% (251/251), выполнено.
Ошибка: Недопустимая формула: /opt/homebrew/Library/Taps/warrensbox/homebrew-tap/Formula/jscheck.rb jscheck: Calling Bottle: ненужный отключен! Замены нет. Сообщите об этой проблеме в warrensbox/tap tap (не Homebrew/brew или Homebrew/core): /opt/homebrew/Library/Taps/warrensbox/homebrew-tap/Formula/jscheck.rb:6
Ошибка: недопустимая формула: /opt/homebrew/Library/Taps/warrensbox/homebrew-tap/Formula/hubapp.rb hubapp: Calling Bottle: ненужный отключен! Замены нет. Сообщите об этой проблеме в warrensbox/tap tap (не Homebrew/brew или Homebrew/core): /opt/homebrew/Library/Taps/warrensbox/homebrew-tap/Formula/hubapp.rb:9
Ошибка: недопустимая формула: /opt/homebrew/Library/Taps/warrensbox/homebrew-tap/Formula/health-check.rb Health-check: Calling Bottle: ненужный отключен! Замены нет. Сообщите об этой проблеме в warrensbox/tap tap (не Homebrew/brew или Homebrew/core): /opt/homebrew/Library/Taps/warrensbox/homebrew-tap/Formula/health-check.rb:9 Ошибка: невозможно tap warrensbox/tap: неверный синтаксис в tap!
Используйте tfswitch, это просто и эффективно.
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
Стивен, ты король!