Digitalocean液滴供应:周期错误
我想在使用远程供应商在每个软件上安装一些软件时创建多个液滴。我有以下代码:
resource "digitalocean_droplet" "server" {
for_each = var.servers
name = each.key
image = each.value.image
size = each.value.size
region = each.value.region
ssh_keys = [
data.digitalocean_ssh_key.terraform.id
]
tags = each.value.tags
provisioner "remote-exec" {
inline = [
"mkdir -p /tmp/scripts/",
]
connection {
type = "ssh"
user = "root"
private_key = file("${var.ssh_key}")
host = digitalocean_droplet.server[each.key].ipv4_address
}
}
这始终会导致以下错误:
错误:循环:digitalocean_droplet.server [“ server2”],digitalocean_droplet.server [“ server1”]
我理解这是指循环依赖性,但如何在每个服务器上安装软件。
I want to create multiple droplets while installing some software onto each of them using a remote provisioner. I have the following code:
resource "digitalocean_droplet" "server" {
for_each = var.servers
name = each.key
image = each.value.image
size = each.value.size
region = each.value.region
ssh_keys = [
data.digitalocean_ssh_key.terraform.id
]
tags = each.value.tags
provisioner "remote-exec" {
inline = [
"mkdir -p /tmp/scripts/",
]
connection {
type = "ssh"
user = "root"
private_key = file("${var.ssh_key}")
host = digitalocean_droplet.server[each.key].ipv4_address
}
}
This always results in the following error:
Error: Cycle: digitalocean_droplet.server["server2"], digitalocean_droplet.server["server1"]
I understand this refers to a circular dependency but how to install the software on each server.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如我的评论中所述,这里的问题是您正在创建一个环状依赖性,因为您在其自己的块中以其名称来引用资源。引用[1]:
要解决此问题,您可以使用特殊关键字
self
来引用所创建的同一实例:[1] https://www.terraform.io/language/ranguage/resources/proviseers/proviseers/connection#the-self-object-self-object
As mentioned in my comment, the issue here is that you are creating a cyclic dependency because you are referring a resource by its name within its own block. To quote [1]:
To fix this, you can use a special keyword
self
to reference the same instance that is getting created:[1] https://www.terraform.io/language/resources/provisioners/connection#the-self-object