更改计数时的地形周期

时间:2019-06-11 17:17:19

标签: terraform

我有一些资源,其count由一个变量参数化。这用于创建VM资源以及null_resource,例如在其上运行部署脚本。当我将计数值从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 [4](破坏)。 [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 [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。

是否有调试这种情况的策略?

1 个答案:

答案 0 :(得分:0)

我在0.12.x中也遇到了类似的问题-我在 <td mat-cell *matCellDef="let element">{{element.origion}}</td>(dataSource) <td mat-cell *matCellDef="let element">{{element.origion}}</td>(dataSource2018) <td mat-cell *matCellDef="let element"> {{element.destinations}} </td>(dataSource) <td mat-cell *matCellDef="let element"> {{element.destinations}} </td>(dataSource2018) 资源中调用了一个预配器,该错误与增加资源计数时出现的错误相同。

我通过使用self对象(aws_instance)来引用资源而不是使用count.index或element()来解决这个问题。