resource "azurerm_windows_virtual_machine" "virtual_machine" {
count = var.vm_count
name = "${local.vm_name}${count.index +1}"
resource "azurerm_virtual_machine_data_disk_attachment" "datadisk01" {
count = var.disk_count
**virtual_machine_id = azurerm_windows_virtual_machine.virtual_machine[count.index].id
managed_disk_id = element("${module.DISK.datadisk_id}","${count.index}")
}
问题-我有2个差异计数变量vm_count和disk_count。 我想要一个通用的解决方案,例如。如果虚拟机计数为2,并且每个虚拟机应具有3个数据磁盘,即disk_count为3。
我能够根据计数创建多个VM和磁盘。但是在vm和磁盘附件时遇到问题,因为我无法在同一资源中使用2个计数。 如何处理这种情况?
面对的问题设为**
总而言之,我想创建vm_count(N)个虚拟机,并创建disk_count(M)个磁盘并将其附加到每个虚拟机。
如何创建N个VM,每个VM创建并附加M个磁盘?
答案 0 :(得分:1)
您可以使用一组索引来实现以下目的:
locals {
indexes = {
for vmi in range(var.vm_count): vmi => [
for ddi in range(var.disk_count):
ddi
]
}
}
这将创建一个这样的地图:
{
"0" = [
0,
1,
2,
]
"1" = [
0,
1,
2,
]
}
以后以这种方式使用:
resource "azurerm_virtual_machine_data_disk_attachment" "datadisk01" {
for_each = local.indexes
virtual_machine_id = azurerm_windows_virtual_machine.virtual_machine[tonumber(each.key)].id
managed_disk_id = element("${module.DISK.datadisk_id}","${each.value[0]}")
}
我还没有完全测试输出,因为VM需要更多配置。但是,正如我所看到的,您将locals
用于vm_name
,我将创建一个映射/对象,其VM名称包含索引,值和所需的磁盘。
我希望这有助于解决问题。
答案 1 :(得分:0)
我在资源中拥有2个循环的唯一方法是使用动态块。
类似这样的东西:
resource "azurerm_windows_virtual_machine" "virtual_machine" {
count = var.vm_count
name = "${local.vm_name}${count.index +1}"
dynamic "setting" {
for_each = var.disk_count
content {
##Storage_disk block
}
}
然后,如果需要,您可以使用each.value访问索引。