首页 > 解决方案 > 更改计数时的 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。

有什么策略可以调试这种情况吗?

标签: terraform

解决方案


我在 0.12.x 中遇到了类似的问题 - 我在资源中调用了配置程序aws_instance,这与增加资源计数时出现的错误相同。

我通过使用 self 对象 ( self.private_ip) 来引用资源而不是使用 count.index 或 element() 来解决它。


推荐阅读