来自销毁提供程序的引用无效



我收到以下错误:来自destroy provisioner的无效引用。我不清楚为什么会出现这种错误。

销毁时间提供程序及其连接配置只能通过"self"、"count.index"或"each.key".

在销毁阶段对其他资源的引用可能导致依赖循环并与createbefore_delete进行糟糕的交互。

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:     ]

我也遇到过类似的问题,在我的案例中,解决方案是使用一个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
}
}
}

如果您只能引用相关资源的属性,那么;无效引用";可能是内联命令中对aws_instance.jenkins-master.private_ip的引用,它指的是相关资源之外的内容。

您可以使用标签来拥有主私有IP,并使用类似的self-tag

tags = {
Name = "put_a_nice_name_or_some_thing_here" #change_this
Master_Private_IP = aws_instance.jenkins-master.private_ip
}

在provisioner块中:

provisioner "remote-exec" {
when = destroy
inline = [
"java -jar /home/ec2-user/jenkins-cli.jar -auth @/home/ec2-user/jenkins_auth -s http://${self.tags.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
}
}

最新更新