Terraform 改变计数时的地形周期
我有一些资源的Terraform 改变计数时的地形周期,terraform,Terraform,我有一些资源的count由一个变量参数化。这用于创建VM资源以及null\u资源s,例如在其上运行部署脚本。当我将计数的值从2减少到1并应用时,我得到一个错误 Terraform执行计划,无任何投诉。但当我应用时,它告诉我有一个循环: 错误:周期:空\u资源。网络\u连接\u配置[7](销毁),空\u资源。网络\u连接\u配置[8](销毁),空\u资源。网络\u连接\u配置[3](销毁),空\u资源。网络\u连接\u配置[4](销毁),空\u资源。网络\u连接\u配置[0](销毁),空资源。网络
count
由一个变量参数化。这用于创建VM资源以及null\u资源
s,例如在其上运行部署脚本。当我将计数的值从2减少到1并应用时,我得到一个错误
Terraform执行计划
,无任何投诉。但当我应用时,它告诉我有一个循环:
错误:周期:空\u资源。网络\u连接\u配置[7](销毁),空\u资源。网络\u连接\u配置[8](销毁),空\u资源。网络\u连接\u配置[3](销毁),空\u资源。网络\u连接\u配置[4](销毁),空\u资源。网络\u连接\u配置[0](销毁),空资源。网络连接配置[6](销毁),空资源。网络连接配置[1](销毁),空资源。网络连接配置[9](销毁),空资源。网络连接配置[2](销毁),空资源。网络连接配置[10](销毁),hcloud\u服务器。卡夫卡[2](销毁),local.all_machine_ips,null_resource.network_connection_配置(准备状态),null_resource.network_connection_配置[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
时,调试日志不会显示任何错误
所以问题是我可以增加计数,但不能减少它。我不想手动破解该文件,因为这意味着我将来无法缩小规模!我使用的是TerraformV0.12.1
有什么策略可以调试这种情况吗 我在0.12.x中遇到了类似的问题-我在
aws_实例
资源中调用了一个provisioner,它给出了与增加资源计数时相同的错误
我通过使用self对象(
self.private\u ip
)来引用资源,而不是使用count.index或element()。注意,即使您没有明确指定一个依赖于,当您将一个资源或数据的输出映射为另一个资源的输入时,仍然可以提取隐式依赖项。您也可以为此发布MCVE,因为错误消息只引用了两个资源。谢谢。我本来想提的,但不想把问题提得太长。我可以添加它,但是如果我添加这些项目的所有依赖项,我将得到基本相同的文件。我看看我能做些什么。有了这个级别的信息null\u资源。文件\u sync
看起来像是罪魁祸首。谢谢。我同意。问题是,这一切都是如此耦合,以至于删除它需要删除大量其他空_资源。在这一点上,发生了巨大的变化,我需要用真实的虚拟机建立一个全新的项目,以测试MVCE是否仍然适用。如果在计划中检测到错误
这将是一个很大的错误!恐怕我采取了怯懦的方式,注释掉了null\u资源
,让它们被销毁(这是安全的,因为它们实际上并不存在)。对于那些不存在的资源,我可以安全地更改计数以缩小“真实”资源的规模。不令人满意,但我怀疑它可能与/