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