#terraform #destroy #wrapper #script #zap #perform #path

app terraform-zap

执行更精细的 terraform destroy 脚本包装器

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次下载

MIT 许可证

27KB
494

terraform-zap

Build Status Build status codecov Crates.io License: MIT

运行 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