使用 for_each 从实例中检索 IP 地址
Retrieve IP address from instances using for_each
我有这个脚本,效果很好。它使用 sepcified 标签创建了 3 个实例,以便轻松识别它们。但问题是我想在代码中添加一个远程执行供应商(目前已评论)以安装一些软件包。如果我使用的是计数,我可以遍历它以对所有实例执行远程执行。我不能使用计数,因为我必须使用 for_each 来遍历本地列表。由于计数和 for_each 不能一起使用,我如何遍历实例以检索它们的 IP 地址以用于远程执行配置程序。
在数字海洋和 AWS 上,我能够使用 host = "${self.public_ip}"
让它工作
但它不适用于 vultr 并给出 Unsupported attribute error
instance.tf
resource "vultr_ssh_key" "kubernetes" {
name = "kubernetes"
ssh_key = file("kubernetes.pub")
}
resource "vultr_instance" "kubernetes_instance" {
for_each = toset(local.expanded_names)
plan = "vc2-1c-2gb"
region = "sgp"
os_id = "387"
label = each.value
tag = each.value
hostname = each.value
enable_ipv6 = true
backups = "disabled"
ddos_protection = false
activation_email = false
ssh_key_ids = [vultr_ssh_key.kubernetes.id]
/* connection {
type = "ssh"
user = "root"
private_key = file("kubernetes")
timeout = "2m"
host = vultr_instance.kubernetes_instance[each.key].ipv4_address
}
provisioner "remote-exec" {
inline = "sudo hostnamectl set-hostname ${each.value}"
} */
}
locals {
expanded_names = flatten([
for name, count in var.host_name : [
for i in range(count) : format("%s-%02d", name, i + 1)
]
])
}
provider.tf
terraform {
required_providers {
vultr = {
source = "vultr/vultr"
version = "2.3.1"
}
}
}
provider "vultr" {
api_key = "***************************"
rate_limit = 700
retry_limit = 3
}
variables.tf
variable "host_name" {
type = map(number)
default = {
"Manager" = 1
"Worker" = 2
}
}
您要查找的 属性 称为 main_ip
而不是 ip4_address
或类似名称。具体可通过 connection
区块中的 self.main_ip
访问。
我有这个脚本,效果很好。它使用 sepcified 标签创建了 3 个实例,以便轻松识别它们。但问题是我想在代码中添加一个远程执行供应商(目前已评论)以安装一些软件包。如果我使用的是计数,我可以遍历它以对所有实例执行远程执行。我不能使用计数,因为我必须使用 for_each 来遍历本地列表。由于计数和 for_each 不能一起使用,我如何遍历实例以检索它们的 IP 地址以用于远程执行配置程序。
在数字海洋和 AWS 上,我能够使用 host = "${self.public_ip}"
让它工作
但它不适用于 vultr 并给出 Unsupported attribute error
instance.tf
resource "vultr_ssh_key" "kubernetes" {
name = "kubernetes"
ssh_key = file("kubernetes.pub")
}
resource "vultr_instance" "kubernetes_instance" {
for_each = toset(local.expanded_names)
plan = "vc2-1c-2gb"
region = "sgp"
os_id = "387"
label = each.value
tag = each.value
hostname = each.value
enable_ipv6 = true
backups = "disabled"
ddos_protection = false
activation_email = false
ssh_key_ids = [vultr_ssh_key.kubernetes.id]
/* connection {
type = "ssh"
user = "root"
private_key = file("kubernetes")
timeout = "2m"
host = vultr_instance.kubernetes_instance[each.key].ipv4_address
}
provisioner "remote-exec" {
inline = "sudo hostnamectl set-hostname ${each.value}"
} */
}
locals {
expanded_names = flatten([
for name, count in var.host_name : [
for i in range(count) : format("%s-%02d", name, i + 1)
]
])
}
provider.tf
terraform {
required_providers {
vultr = {
source = "vultr/vultr"
version = "2.3.1"
}
}
}
provider "vultr" {
api_key = "***************************"
rate_limit = 700
retry_limit = 3
}
variables.tf
variable "host_name" {
type = map(number)
default = {
"Manager" = 1
"Worker" = 2
}
}
您要查找的 属性 称为 main_ip
而不是 ip4_address
或类似名称。具体可通过 connection
区块中的 self.main_ip
访问。