首页 > 解决方案 > 来自销毁供应商的无效引用

问题描述

我收到以下错误:来自销毁配置器的无效引用。我不清楚为什么会发生此错误。

销毁时供应商及其连接配置只能通过“self”、“count.index”或“each.key”引用相关资源的属性。

在销毁阶段对其他资源的引用可能会导致依赖循环并与 create_before_destroy 交互不良。

  provisioner "remote-exec" {
    when = destroy
    inline = [
      "java -jar /home/ec2-user/jenkins-cli.jar -auth @/home/ec2-user/jenkins_auth -s http://${aws_instance.jenkins-master.private_ip}:8080 delete-node ${self.private_ip}"
    ]
    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = file("~/.ssh/id_rsa")
      host        = self.public_ip
    }
  }


Error: Invalid reference from destroy provisioner

  on instances.tf line 67, in resource "aws_instance" "jenkins-worker-oregon":
  67:     inline = [
  68:       "java -jar /home/ec2-user/jenkins-cli.jar -auth @/home/ec2-user/jenkins_auth -s http://${aws_instance.jenkins-master.private_ip}:8080 delete-node ${self.private_ip}"
  69:     ]

标签: terraform

解决方案


我有一个类似的问题,我的解决方案是使用一个 null_resource,它在特定值发生变化时触发。

在您的情况下,解决方案可能如下:

resource "null_resource" "register-to-master" {
  triggers = {
    jenkins-master-ip = aws_instance.jenkins-master.private_ip
    private_ip = some_value
  }

  provisioner "remote-exec" {
    when = destroy
    inline = [
      "java -jar /home/ec2-user/jenkins-cli.jar -auth @/home/ec2-user/jenkins_auth -s http://${self.triggers.jenkins-master-ip}:8080 delete-node ${self.triggers.private_ip}"
    ]
    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = file("~/.ssh/id_rsa")
      host        = self.triggers.public_ip
    }
  }

  provisioner "remote-exec" {
    when = create
    inline = [ "echo 'create step'" ]
    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = file("~/.ssh/id_rsa")
      host        = self.triggers.public_ip
    }
  }
}

推荐阅读