terraform - 更改计数时的 Terraform 循环
问题描述
我有一些count
由变量参数化的资源。这用于创建 VM 资源以及null_resource
例如在它们上运行部署脚本。当我将计数值从 2 减少到 1 并应用时,出现错误。
Terraformplan
毫无怨言地执行。但是当我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。
有什么策略可以调试这种情况吗?
解决方案
我在 0.12.x 中遇到了类似的问题 - 我在资源中调用了配置程序aws_instance
,这与增加资源计数时出现的错误相同。
我通过使用 self 对象 ( self.private_ip
) 来引用资源而不是使用 count.index 或 element() 来解决它。
推荐阅读
- php - 如何使用返回自身实例的方法模拟别名类?
- r - 单击 actionButton 时向数据框添加新行
- xcode - 我的 pod 安装缺少什么?Xcode 构建失败 Azure Devops Pipeline
- java - 将数据传递给主要活动时尝试写入空数组错误
- php - Woocommerce 可变产品的混合 php 和 jQuery 代码
- amazon-web-services - “aws s3 rm”命令需要很长时间
- c++ - 在派生类中重载模板运算符
- visual-studio - 是否有一个 csproj 属性禁用 Visual Studio 的自动 NuGet 恢复?
- android - 如果已连接,如何减少将用户引导到家庭活动的延迟?
- c# - 设计 REST WEB API - .Net Core 中的授权