Terraform版本經理受RBENV啟發
目前TFENV支持以下OS
通過Homebrew安裝
brew install tfenv
通過Arch用戶存儲庫(AUR)安裝
yay --sync tfenv
通過木偶安裝
使用木偶模塊sergk-tfenv
include ::tfenv
${HOME}/.tfenv
) git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
~/.tfenv/bin
添加到您的$PATH
bash:
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
ZSH:
$ echo ' export PATH="$HOME/.tfenv/bin:$PATH" ' >> ~ /.zprofile
對於WSL用戶:
echo ' export PATH=$PATH:$HOME/.tfenv/bin ' >> ~ /.bashrc
或者,您可以將tfenv/bin/*
腳本的符號鏈接到已添加到您的$PATH
(例如/usr/local/bin
)的路徑中, OSX/Linux Only!
ln -s ~/.tfenv/bin/* /usr/local/bin
在ubuntu/debian觸摸/usr/local/bin
上可能需要sudo訪問權限,但是您可以創建${HOME}/bin
或${HOME}/.local/bin
,下次登錄將添加到會話$PATH
或通過跑步. ${HOME}/.profile
將添加到當前的Shell Session的$PATH
。
mkdir -p ~/.local/bin/
. ~/.profile
ln -s ~/.tfenv/bin/* ~/.local/bin
which tfenv
安裝特定版本的Terraform。
如果未傳遞參數,則使用tfenv_terraform_version環境變量或.trraform-version文件自動解決要使用的版本,即按照優先級的順序,即tfenv_terraform_version,然後。terraform-version。如果找不到,則默認值為“最新”。
如果傳遞了參數,則可用選項:
xyz
SEMVER 2.0.0字符串指定要安裝的確切版本latest
是安裝最新版本的語法latest:<regex>
是一種語法,可以安裝最新版本匹配的正則撥號(Grep -e)latest-allowed
是掃描Terraform文件的語法,以最大程度地允許使用哪個版本。min-required
是掃描您的Terraform文件的語法,以檢測哪個版本最少。請參閱“必需”文檔。另請參見下面的最小且最新允許的部分。
$ tfenv install
$ tfenv install 0.7.0
$ tfenv install latest
$ tfenv install latest:^0.8
$ tfenv install latest-allowed
$ tfenv install min-required
如果路徑中存在shasum
,則TFENV將驗證有關Hashicorp已發布的SHA256 HASH的下載。如果在路徑中可用的Keybase,它還將使用Hashicorp發布的公共密鑰來驗證那些已發布哈希的簽名。
您可以選擇使用GNUPG工具進行PGP簽名驗證,如果沒有鍵鍵,則可以使用:
其中TFENV_INSTALL_DIR
例如~/.tfenv
或/usr/local/Cellar/tfenv/<version>
echo 'trust-tfenv: yes' > ${TFENV_INSTALL_DIR}/use-gpgv
tfenv install
trust-tfenv
指令意味著驗證使用TFENV存儲庫中發現的Hashicorp OpenPGP密鑰的副本。跳過該指令意味著Hashicorp鍵必須在現有的默認值得信賴的鍵中。使用文件${TFENV_INSTALL_DIR}/use-gnupg
來調用完整的gpg
工具,並查看Trust狀態;提防缺乏信任路徑不會導致驗證失敗。
如果使用.terraform-version文件, tfenv install
(無參數)將安裝其中寫的版本。
請注意,我們不進行語義版本範圍解析,而是使用有史以來首先找到的版本作為最低要求的候選版本。用戶可以使定義合理。 IE
// this will detect 0.12.3
terraform {
required_version = " <0.12.3, >= 0.10.0 "
}
// this will detect 0.10.8 (the latest 0.10.x release)
terraform {
required_version = " ~> 0.10.0, <0.12.3 "
}
TFENV_ARCH
字符串(默認: amd64
)
指定體系結構。可以使用TFENV_ARCH
環境變量指定默認AMD64以外的架構
注意:當$(uname -m)
匹配aarch64* | arm64*
時,默認更改為arm64
的ARM64更改。 aarch64* | arm64*
TFENV_ARCH=arm64 tfenv install 0.7.9
TFENV_AUTO_INSTALL
字符串(默認:true)
如果當前未安裝默認情況下,則應自動安裝Terraform,如果默認情況下指定的版本或.terraform-version文件。
TFENV_AUTO_INSTALL=false terraform plan
terraform use <version that is not yet installed>
TFENV_CURL_OUTPUT
整數(默認:2)
從遠程服務器下載Terraform版本時,設置用於顯示下載進度的機制。
-#
捲曲-s
到捲曲TFENV_DEBUG
整數(默認:0)
設置TFENV的調試級別。
TFENV_REMOTE
字符串(默認:https://releases.hashicorp.com)
從默認的遙控器安裝
TFENV_REMOTE=https://example.jfrog.io/artifactory/hashicorp
TFENV_REVERSE_REMOTE
整數(默認:0)
當使用自定義遙控器(例如文物)而不是hashicorp服務器時,可以倒入遠程目錄捲曲返回的Terraform版本列表。在這種情況下, latest
功能將無法按預期工作,因為它希望按發布日期從最新到最舊的發行日期列出版本。如果您的遙控器提供了一個舊的列表,則設置TFENV_REVERSE_REMOTE=1
,並且功能將被還原。
TFENV_REVERSE_REMOTE=1 tfenv list-remote
TFENV_CONFIG_DIR
路徑(默認: $TFENV_ROOT
)
存在本地Terraform版本和配置文件的目錄的路徑。
TFENV_CONFIG_DIR="$XDG_CONFIG_HOME/tfenv"
TFENV_TERRAFORM_VERSION
字符串(默認:“”)
如果不是空字符串,則此變量覆蓋了Terraform版本,在.terraform-version文件中指定。 latest
和latest:<regex>
語法也得到了支持。 tfenv install
和tfenv use
命令也尊重此變量。
例如
TFENV_TERRAFORM_VERSION=latest:^0.11. terraform --version
TFENV_NETRC_PATH
字符串(默認:“”)
如果不是空字符串,則此變量指定用於訪問遠程位置的憑據文件(如果與tfenv_remote結合使用,則有用)。
例如
TFENV_NETRC_PATH="$PWD/.netrc.tfenv"
BASHLOG_COLOURS
整數(默認:1)
要禁用控制台輸出的著色,請設置為0。
BASHLOG_DATE_FORMAT
字符串(默認: +%f%t)
傳遞給date
二進制的日期的顯示格式,以生成用作以下前綴的DATESTAMP:
FILE
類型日誌文件行。BASHLOG_EXTRA=1
時,每個控制台輸出行BASHLOG_EXTRA
整數(默認:0)
默認情況下,TFENV的控制台輸出不會打印日期郵票或日誌嚴重性。
為了啟用此功能,使正常輸出等同於文件日誌輸出,將其設置為1。
BASHLOG_FILE
整數(默認:0)
設置為1,以啟用純文本記錄到文件(文件類型記錄)。
日誌文件的默認路徑由 /tmp /$(basename $ 0)定義。log每個可執行文件log toto其自己的文件。
例如
BASHLOG_FILE=1 tfenv use latest
將登錄/tmp/tfenv-use.log
BASHLOG_FILE_PATH
字符串(默認: /tmp /$(basename $ {0})。log)
指定單個文件作為所有文件類型記錄的目標,無論執行腳本如何。
BASHLOG_I_PROMISE_TO_BE_CAREFUL_CUSTOM_EVAL_PREFIX
字符串(默認:“”)
小心 - 濫用將摧毀您所愛的一切
該變量允許您傳遞包含一個命令的字符串,該字符串將使用eval
執行,以便為每個控制台輸出線和每個文件類型日誌輸入產生前綴。
例如
BASHLOG_I_PROMISE_TO_BE_CAREFUL_CUSTOM_EVAL_PREFIX='echo "${$$} "'
將在每個日誌線上以“調用過程”的pid前綴。
BASHLOG_JSON
整數(默認:0)
設置為1,以啟用JSON記錄到文件(JSON類型記錄)。
日誌文件的默認路徑由 /tmp /$(basename $ 0)定義。
例如
BASHLOG_JSON=1 tfenv use latest
將以JSON格式登錄/tmp/tfenv-use.log.json
JSON日誌內容:
{"timestamp":"<date +%s>","level":"<log-level>","message":"<log-content>"}
BASHLOG_JSON_PATH
字符串(默認: /tmp /$(basename $ {0})。log.json)
要指定單個文件作為所有JSON類型記錄的目標,無論執行腳本如何。
BASHLOG_SYSLOG
整數(默認:0)
要使用logger
二進制登錄到Syslog,請將其設置為1。
因此,基本功能是:
local tag="${BASHLOG_SYSLOG_TAG:-$(basename "${0}")}";
local facility="${BASHLOG_SYSLOG_FACILITY:-local0}";
local pid="${$}";
logger --id="${pid}" -t "${tag}" -p "${facility}.${severity}" "${syslog_line}"
BASHLOG_SYSLOG_FACILITY
字符串(默認:local0)
使用Syslog類型日誌記錄時,用於指定的Syslog設施。
BASHLOG_SYSLOG_TAG
字符串(默認:$(basename $ 0))
使用Syslog類型日誌記錄時指定的Syslog標籤。
默認為調用過程的pid。
切換版本要使用
如果沒有傳遞參數,則會通過.terraform-version文件或tfenv_terraform_version環境變量自動解析要使用的版本(tfenv_terraform_version佔用了優先級),如果沒有找到任何內容,則默認為“最新”。
latest
是使用最新安裝版本的語法
latest:<regex>
是一種語法,可使用最新的安裝版本匹配的正則撥正力(由GREP -E使用)
min-required
將切換到您的Terraform源所需的版本(請參見上文tfenv install
)
$ tfenv use
$ tfenv use min-required
$ tfenv use 0.7.0
$ tfenv use latest
$ tfenv use latest:^0.8
注意: tfenv use latest
或tfenv use latest:<regex>
將找到已安裝的最新匹配版本。如果沒有安裝匹配版本,並且將TFENV_AUTO_INSTALL設置為true
(默認值),將安裝和使用遠程存儲庫中的最新匹配版本。
卸載Terraform latest
的特定版本是卸載最新版本的語法latest:<regex>
是卸載最新版本匹配REGEX的語法(GREP -E使用)
$ tfenv uninstall 0.7.0
$ tfenv uninstall latest
$ tfenv uninstall latest:^0.8
列表安裝的版本
$ tfenv list
* 0.10.7 (set by /opt/tfenv/version)
0.9.0-beta2
0.8.8
0.8.4
0.7.0
0.7.0-rc4
0.6.16
0.6.2
0.6.1
列出可安裝版本
$ tfenv list-remote
0.9.0-beta2
0.9.0-beta1
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.8.0-rc3
0.8.0-rc2
0.8.0-rc1
0.8.0-beta2
0.8.0-beta1
0.7.13
0.7.12
...
如果將.terraform-version
文件放在項目root或在主目錄中,則TFENV檢測並使用其中寫的版本。如果該版本是latest
或latest:<regex>
,則將選擇當前安裝的最新匹配版本。
請注意,tfenv_terraform_version環境變量可用於覆蓋版本,由.terraform-version
文件指定。
$ cat .terraform-version
0.6.16
$ terraform version
Terraform v0.6.16
Your version of Terraform is out of date! The latest version
is 0.7.3. You can update by downloading from www.terraform.io
$ echo 0.7.3 > .terraform-version
$ terraform version
Terraform v0.7.3
$ echo latest:^0.8 > .terraform-version
$ terraform version
Terraform v0.8.8
$ TFENV_TERRAFORM_VERSION=0.7.3 terraform --version
Terraform v0.7.3
git --git-dir=~/.tfenv/.git pull
rm -rf /some/path/to/tfenv