我希望创建多个液滴,同时使用远程提供程序将一些软件安装到每个液滴上。我有以下代码:
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“
我知道这指的是循环依赖关系,但是如何在每台服务器上安装软件。
发布于 2022-05-10 11:06:33
正如我在评论中提到的,这里的问题是,您正在创建一个循环依赖项,因为您是在它自己的块中引用一个资源的名称。引证1
引用创建依赖项,引用其块中的资源名称将创建依赖周期。
要解决这个问题,您可以使用一个特殊的关键字self来引用正在创建的同一个实例:
resource "digitalocean_droplet" "server" {
for_each = var.servers
provisioner "remote-exec" {
inline = [
"mkdir -p /tmp/scripts/",
]
connection {
type = "ssh"
user = "root"
private_key = file("${var.ssh_key}")
host = self.ipv4_address # <---- here is where you would use the self keyword
}
}https://stackoverflow.com/questions/72184191
复制相似问题