1

我正在使用私有 openstack 云运行 terraform 来引导新服务器。当我在最繁忙的操作时间(工作日的下午)尝试创建新服务器(使用任何方法)时,通常有一半的服务器会失败(这与 terraform 无关)。问题是,当我尝试配置的其中一个服务器无法完成一个provisioner "remote-exec"没有错误的块时(因为我的私有云),我的整个过程都terraform apply停止了。

我希望 terraform 在我运行时完全忽略这些失败的服务器,terraform apply这样如果我尝试配置 20 个服务器并且其中只有一个成功启动,那么该服务器将运行我在资源块中指定的所有命令。

有没有类似的东西ignore_failed_resources = true可以添加到我的资源中,以便 terraform 将忽略失败的服务器并运行成功的服务器以完成?

4

2 回答 2

2

没有可以启用的简单配置开关来实现此目的。您能否更具体地说明导致“远程执行”失败的问题?

如果是因为它只是拒绝连接,您可以将您的“remote-exec”切换为“local-exec”并将您的命令包装在脚本中,将服务器的主机名作为参数传递。然后该脚本将处理启动 SSH 连接并运行所需的命令。如果发生错误,请确保脚本正常失败,退出代码为 0,以便 terraform 认为脚本正常工作。

resource "aws_instance" "web" {
    provisioner "local-exec" {
        command = "./myremotecommand.sh ${aws_instance.web.private_ip}"
    }
}
于 2016-10-15T17:12:19.270 回答
1

我猜您已经想出了一个解决方案,但是在这里为将来遇到此问题的任何人添加我的解决方案。

为什么不简单地在命令部分这样做呢?

provisioner "local-exec" {
    command = "my command || true"
}

这样,它总是返回代码 0,所以如果 shell 忽略失败,terraform 也会忽略它。

于 2020-12-03T10:37:53.193 回答