对于 Terraform 来说,自动版本升级还不够好

对话的走向

每天都在使用cron命令执行terraform plan来进行差异检查和其他操作,但今天也检测到了差异和错误。

所以我尝试了一下调查,

$ terraform --version
Terraform v0.11.10

Your version of Terraform is out of date! The latest version
is 0.11.11. You can update by downloading from www.terraform.io/downloads.html

“你的版本已经过时了~”
啊,原来如此。而且,你的版本已经升级了。

这个东西,不是用来管理包的,而是下载二进制文件的。 不能自动升级吗?


谷歌先生之后

唔,好像Mac可以用Homebrew轻松实现呢…(我自己使用的是Windows,而运行cron的是Linux)


此外,还有Google先生之后。

通过阅读这篇文章我了解到了一个叫做 tfenv 的工具。

Terraform初学者指南:以日常运维所学知识简洁总结

我试试看

安装方式按照 README 上的说明进行。

git clone https://github.com/kamatama41/tfenv.git ~/.tfenv
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile

一开始就执行tfenv install latest,它会帮我们安装最新版本。

$ tfenv install latest
[INFO] Installing Terraform v0.12.0
[INFO] Downloading release tarball from https://releases.hashicorp.com/terraform/0.12.0/terraform_0.12.0_linux_amd64.zip

curl: (22) The requested URL returned error: 403 Forbidden
tfenv: tfenv-install: [ERROR] Tarball download failed

哎哟…好像出错了。
确实,点击下载链接会返回403错误。这是怎么回事。。

查看源代码后发现,它好像是通过访问以下链接来判断最新版本的,terraform_0.12.0-alpha4 的尾部的 alpha 部分可能在构建链接时遗漏了吧… 而且我不太想使用 alpha 这样的词啊。
https://releases.hashicorp.com/terraform/

问题也已经上升了,但是还没有修复吗…(没有仔细查看)。


稍微玩弄

在这一部分中,我获取了版本列表,
https://github.com/tfutils/tfenv/blob/master/libexec/tfenv-list-remote#L11

curlw -sf https://releases.hashicorp.com/terraform/ | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+(-(rc|beta)[0-9]+)?" | uniq

在此之后添加 | grep -v alpha

重试

下一次进展顺利。不是alpha版,而是已安装了最新版。

$ tfenv install latest
[INFO] Installing Terraform v0.11.11
[INFO] Downloading release tarball from https://releases.hashicorp.com/terraform/0.11.11/terraform_0.11.11_linux_amd64.zip
######################################################################## 100.0%
[INFO] Downloading SHA hash file from https://releases.hashicorp.com/terraform/0.11.11/terraform_0.11.11_SHA256SUMS
tfenv: tfenv-install: [WARN] No keybase install found, skipping GPG signature verification
tfenv: tfenv-install: [WARN] No shasum tool available. Skipping SHA256 hash validation
Archive:  tfenv_download.YZmMIj/terraform_0.11.11_linux_amd64.zip
  inflating: /home/akiyo.ando/.tfenv/versions/0.11.11/terraform
[INFO] Installation of terraform v0.11.11 successful
[INFO] Switching to v0.11.11
[INFO] Switching completed

路径的位置也发生了改变。

$ terraform --version
Terraform v0.11.11

$ which terraform
~/.tfenv/bin/terraform

完成

我让 MyPC 在启动 shell 时执行。

echo 'tfenv install latest >/dev/null' >> ~/.bash_profile

在 Linux 上注册了 Cron,以便定期执行 terraform plan。

0 8 * * * tfenv install latest
0 9 * * * python ${HOME}/terraform/terraform/slackbot/plugins/terraformer_by_python.py

印象

虽然感觉有点不太好,但我已经实现了自动化。(适用于非 macOS 的人)大家都是怎么处理这个操作呢?果然还是 macOS 好啊…

广告
将在 10 秒后关闭
bannerAds