9 个不稳定版本 (3 个重大更改)
使用旧版 Rust 2015
0.4.0 | 2018年9月24日 |
---|---|
0.3.3 | 2018年8月26日 |
0.3.2 | 2018年4月19日 |
0.2.3 | 2018年4月17日 |
0.1.0 | 2018年4月15日 |
#2 in #zap
每月21次下载
27KB
494 行
terraform-zap
运行 terraform-zap
跳过被忽略(可能受保护)的 Terraform 资源,同时像 terraform destroy
一样销毁所有其他资源。
terraform
必须仍然安装,并位于 PATH
中,因为 terraform-zap
只是 terraform
的二进制包装器。
背景
目前,如果任何 .tf
文件包含任何资源的 prevent_destroy = true
,则 terraform destroy
将失败,没有提供任何标志来强制 terraform
跳过此类资源。
此脚本包装器通过解析当前工作目录中的 .tfzignore
文件(其中包含 .tf
文件)来解决这个问题,以跳过指定的资源名称,类似于 .gitignore
。
示例 .tfzignore
文件(TOML 格式)
exact = [
"postgresql_database.some_db_name",
"postgresql_role.some_role_name",
]
如果存在与上述名称完全匹配的资源,则这些资源将自动跳过,通过仅使用 terraform-zap
命令即可解决跳过上述资源以可能解决 prevent_destroy = true
问题的复杂命令的问题。
安装
Linux x86_64 的直接下载
最简单的方法是使用以下示例运行安装脚本。
curl -sSf https://raw.githubusercontent.com/guangie88/terraform-zap/master/install-linux.sh | sudo sh
您需要以 root
身份运行,或者通过 sudo
运行,因为脚本将 terraform-zap
二进制文件放入 /usr/local/bin/
。
您还可以选择访问 发布 并下载 zip 资产中静态构建的最新二进制版本。
通过 cargo install
(适用于 Linux、Windows 和 Mac)
首先,您需要从 https://rustup.rs/ 安装 cargo
。对于任何主流架构和操作系统,安装过程都应该非常简单。
之后,运行 cargo install terraform-zap
进行安装。这将自动从 crates.io
获取 terraform-zap
CLI 应用程序,编译并将其安装到您的 Cargo 安装二进制目录中。
如果 terraform-zap
已经安装,请运行 cargo install -f terraform-zap
代替。
如何运行
在放置 .tfzignore
文件的情况下,只需运行 terraform-zap
。您应该看到主要是 terraform destroy
的日志,但被忽略的资源现在在确认过程中将不再出现。
如果之前有设置了 prevent_destroy = true
的资源,如果这些资源被正确忽略,确认提示应显示正确。
如果您需要将参数传递给 terraform destroy
,请使用位置参数,例如。
terraform-zap -vvv -- -no-color -var "foo=bar"
-vvv
传递给 terraform-zap
,而 -no-color
、-var
和 "foo=bar"
传递给 terraform destroy
。
有关更多 CLI 参数详细信息,请键入 terraform-zap -h
。
terraform zap
而不是 terraform-zap
(对于 bash
设置)
可以通过使用启动时导出的函数,使 terraform zap [...]
能够运行 terraform-zap [...]
。这使得外部程序看起来像是 terraform
子命令的一部分。
请注意,这完全是装饰性的,也是可选的。
将以下 bash
函数添加到您的启动脚本中(例如 ~/.bashrc
),以允许上述操作
terraform() {
if [[ $1 == "zap" ]]; then
command terraform-zap "${@:2}"
else
command terraform "${@:1}"
fi
}
要么重新启动当前终端,要么运行 source ~/.bashrc
(如果按照示例操作),然后尝试运行 terraform zap
以检查上述函数是否按预期工作。在非 Terraform 目录中运行应显示 No state file was found!
错误消息,表明函数已正确设置。
贡献
欢迎通过拉取请求促进对存储库的改进。
致谢
感谢 @chrissng
提供了原始的 terraform destroy
命令,该命令仅针对非受保护资源。原始命令行如下
TARGETS=$(for I in $(terraform state list | grep -v postgresql); \
do echo " -target $I"; done); \
echo terraform destroy $TARGETS
依赖关系
~8.5MB
~160K SLoC