【问题标题】:How do I create N VMs with M disks created and attached per VM?如何创建 N 个 VM,每个 VM 创建并附加 M 个磁盘?
【发布时间】:2020-09-08 07:53:59
【问题描述】:
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。 我想要一个通用的解决方案,例如。如果 vm count 为 2,并且每个 VM 应该有 3 个 datadisk,即 disk_count 为 3。

我可以根据计数创建多个虚拟机和磁盘。但是在 vm 和磁盘连接时面临问题,因为我无法在同一资源中使用 2 个计数。 这种情况如何处理?

生产线上面临的问题**

总之,我想创建 vm_count (N) 个 VM,其中创建了 disk_count (M) 个磁盘并将其附加到 每个 VM。

如何创建 N 个 VM,每个 VM 创建并附加 M 个磁盘?

【问题讨论】:

  • 您希望像双 for-loop 这样的东西?首先循环 vm_count,然后是 disk_count 并创建 6 个 azurerm_virtual_machine_data_disk_attachment?
  • 是的,我正在寻找类似的解决方案。但是,这里的问题是我在 VM 资源和磁盘资源中使用了计数,如果我使用 for 循环那么如何获取 virtual_machine_id ?

标签: azure count terraform


【解决方案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 名称包含索引、值和所需的磁盘。

我希望这有助于解决问题。

【讨论】:

    【解决方案2】:

    我能够在一个资源中拥有 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 访问索引。

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 1970-01-01
      • 2019-03-14
      • 2017-12-31
      • 2020-10-10
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多