我通过for_each创建了几个虚拟机,但只有一个必须具有公共IP地址。我该怎么做呢?可以理解如何使用count来做到这一点,但是for_each的方法是什么呢?
main.tf
variable "vms" {}
resource "azurerm_network_interface" "nics" {
for_each = var.vms
name = each.value.nic
location = var.resource_location
resource_group_name = azurerm_resource_group.rg.name
ip_configuration {
name = "nic-${each.value.name}"
subnet_id = lookup(azurerm_subnet.subnets, each.value["subnet_id"], null)["id"]
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.ext_ip.id (BUT ONLY FOR THE FIRST VM IN LIST)
}
}terraform.tfvars
vms = {
vm1 = {
disk_size = "30"
name = "vm1"
nic = "nic-1"
sku = "7_9"
subnet_id = "snet1"
username = "centos"
vm_size = "Standard_B1ms"
}
vm2 = {
disk_size = "35"
name = "vm2"
nic = "nic-2"
sku = "7_9"
subnet_id = "snet2"
username = "centos"
vm_size = "Standard_B1ls"
}
}发布于 2021-09-20 18:05:15
通过以下方法,您可以准备一个有条件的公网ip映射,然后在此基础上创建资源。
variables.tf
variable "vms" {
type = map(object({
#...
public_ip = optional(bool)
}))
}locals.tf
pips = { for k, vm in var.vms : k => {
# add required attributes to generate public ip resource
} if vm.public_ip == true
}main.tf
resource "azurerm_public_ip" "public_ip" {
for_each = local.pips
# ...
}
resource "azurerm_network_interface" "nics" {
for_each = var.vms
# ...
ip_configuration {
#...
public_ip_address_id = try(azurerm_public_ip.public_ip[each.key].id,null)
}
}https://stackoverflow.com/questions/69255210
复制相似问题