[英]how to create a Terraform for_each loop for number of virtual machines in Azure availability set
我们可以使用“计数”循环在可用性集中创建多个 azure 虚拟机。
我们如何使用“for_each”循环创建相同的主机名和网络 interfaceid 将是动态的并循环。 (在地形> 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
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 尚未实现(v. 12.23)。 我收到错误The name "for_each" is reserved for use in a future version of Terraform.
您可以在对象列表中指定所需的 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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.