我们可以使用“计数”循环在可用性集中创建多个Azure虚拟机。
我们如何使用“ for_each”循环创建相同的主机名和网络接口ID,并进行动态循环。 (以Terrraform> 0.12.6)
resource "azurerm_virtual_machine" "test" {
# user provides inputs only for the number of vms to be created in the Azure avaialibility set
count = var.count
name = "acctvm${count.index}"
location = azurerm_resource_group.test.location
availability_set_id = azurerm_availability_set.avset.id
resource_group_name = azurerm_resource_group.test.name
network_interface_ids = [element(azurerm_network_interface.test.*.id, count.index)]
vm_size = "Standard_DS1_v2"
tags = var.tags
答案 0 :(得分:0)
For-each需要一组循环。我假设您使用变量作为输入,所以
variable "vms" {
type = list(string)
default = ["alpha", "beta"]
}
variable "vms_data" {
type = map(map(string))
default = {
alpha = {
hostname = "alpha"
interfaceid = "01"
}
alpha = {
hostname = "beta"
interfaceid = "02"
}
}
}
resource "azurerm_virtual_machine" "test" {
for_each = toset(var.vms)
name = var.vms_data[each.value].hostname
location = azurerm_resource_group.test.location
availability_set_id = azurerm_availability_set.avset.id
resource_group_name = azurerm_resource_group.test.name
network_interface_ids = [
element(azurerm_network_interface.test.*.id, var.vms_data[each.value].interfaceid)]
vm_size = "Standard_DS1_v2"
tags = var.tags
}
但是Azure尚未实现(12.23版)。我收到一个错误The name "for_each" is reserved for use in a future version of Terraform.
答案 1 :(得分:0)
您可以在对象列表中指定所需的VM属性,然后使用for_each
循环,如下所示:
variable "VirtualMachines" {
type = list(object({
hostname= string
interfaceid = string
}))
default = [
{
hostname= "VM01",
interfaceid = "01"
},
{
hostname= "VM02",
interfaceid = "02"
}
]
}
resource "azurerm_virtual_machine" "test" {
for_each = {for vm in var.VirtualMachines: vm.hostname => vm}
name = each.value.hostname
location = azurerm_resource_group.test.location
availability_set_id = azurerm_availability_set.avset.id
resource_group_name = azurerm_resource_group.test.name
network_interface_ids = [each.value.interfaceid]
vm_size = "Standard_DS1_v2"
tags = var.tags
}