【发布时间】:2019-10-26 04:13:06
【问题描述】:
我有一些资源,其count 由变量参数化。这用于创建 VM 资源以及 null_resources,例如在它们上运行部署脚本。当我将计数值从 2 减少到 1 并应用时,出现错误。
Terraform 执行plan 没有任何投诉。但是当我apply时,它告诉我有一个循环:
错误:循环:null_resource.network_connection_configuration[7](销毁)、null_resource.network_connection_configuration[8](销毁)、null_resource.network_connection_configuration[3](销毁)、null_resource.network_connection_configuration[4](销毁)、null_resource.network_connection_configuration [0](销毁),null_resource.network_connection_configuration[6](销毁),null_resource.network_connection_configuration[1](销毁),null_resource.network_connection_configuration[9](销毁),null_resource.network_connection_configuration[2](销毁),null_resource.network_connection_configuration [10](销毁)、hcloud_server.kafka[2](销毁)、local.all_machine_ips、null_resource.network_connection_configuration(准备状态)、null_resource.network_connection_configuration[5](销毁)
这是文件的相关部分:
variable kafka_count {
default = 3
}
resource "hcloud_server" "kafka" {
count = "${var.kafka_count}"
name = "kafka-${count.index}"
image = "ubuntu-18.04"
server_type = "cx21"
}
locals {
all_machine_ips = "${hcloud_server.kafka.*.ipv4_address)}"
}
resource "null_resource" "network_connection_configuration" {
count = "${length(local.all_machine_ips)}"
triggers = {
ips = "${join(",", local.all_machine_ips)}"
}
depends_on = [
"hcloud_server.kafka"
]
connection {
type = "ssh"
user = "deploy"
host = "${element(local.all_machine_ips, count.index)}"
port = 22
}
// ... some file provisioners
}
当我尝试使用可视化找到循环时:
terraform graph -verbose -draw-cycles
没有可见的循环。
当我使用TF_LOG=1 时,调试日志不显示任何错误
所以问题是我可以增加计数但不能减少它。我不想手动破解文件,因为这意味着我将来无法缩小!我正在使用 Terraform v0.12.1。
有什么策略可以调试这种情况吗?
【问题讨论】:
-
请注意,即使您没有明确指定
depends_on,当您将一个资源或数据的输出映射为另一个资源的输入时,您仍然可以获取隐式依赖关系。您也可以为此发布 MCVE,因为错误消息仅引用两个资源。 -
谢谢。我正要提到这一点,但不想让这个问题太长。我可以添加它,但如果我添加这些项目的所有依赖项,我最终会得到基本相同的文件。我会看看我能做什么。
-
有了这个级别的信息
null_resource.files_sync看起来像是罪魁祸首。 -
谢谢。我同意。问题是它是如此耦合,以至于删除它需要删除许多其他 null_resources。那时已经发生了很大的变化,以至于我需要使用真实的 VM 建立一个全新的项目来测试 MVCE 是否仍然适用。如果在
plan中检测到错误,这将容易得多! -
恐怕我采取了懦弱的方式并注释掉了
null_resources让他们被摧毁(这是安全的,因为他们并不真正存在)。对于那些不存在的,我可以安全地更改计数以缩减“真实”资源。不满意,但我怀疑它可以连接到github.com/hashicorp/terraform/issues/21662/stackoverflow.com/questions/56514719/…
标签: terraform