terraform - 来自销毁供应商的无效引用
问题描述
我收到以下错误:来自销毁配置器的无效引用。我不清楚为什么会发生此错误。
销毁时供应商及其连接配置只能通过“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: ]
解决方案
我有一个类似的问题,我的解决方案是使用一个 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
}
}
}
推荐阅读
- asp.net-core-mvc - 与操作方法关联的视图名称可能不同
- android - Auth0 Android - 如何更新 id_token?
- ios - 为什么即使我完成了所有必要的步骤,我的代理人也无法工作?
- html - 自定义下拉菜单在移动设备上保持打开状态
- git - 捆绑后更新远程参考
- python - 根据前一页的 QCheckBox.isChecked() 跳过下一个 QWizardPage
- python - 如何在超过阈值后遍历熊猫数据框中的每一行并设置等于 nan 的值?
- java - 使用 Gradle 5 使用 Lombok 编译 Kotlin 和 Java
- r - 为什么“rbind”比“set”更快地增长数据表?
- amazon-web-services - 无效的策略角色 JSON