微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 terraform 部署时未排序的 LUN 编号

如何解决通过 terraform 部署时未排序的 LUN 编号

我能够在 Azure 上使用 terraform 成功部署 5 个数据磁盘,但是当我在门户中签入时,这些数据磁盘不是像 (lun3,lun1,lun0,lun2,lun4) 那样随机排序,但是当我使用 ARM 部署它们时模板,它们按顺序更新。

下面是我附加磁盘的代码

resource "azurerm_managed_disk" "disk" {
  for_each             = toset([for index in local.map : j.index])
  name                 = ...
  location             = ...
  resource_group_name  = ...
  storage_account_type = ...
  create_option        = "Empty"
  disk_size_gb         = ..
}

resource "azurerm_virtual_machine_data_disk_attachment" "disk_attach" {
  for_each           = toset([for index in local.map : j.index])
  lun                = 0..n
  managed_disk_id    = azurerm_managed_disk.disk[each.key].id
  virtual_machine_id = ...
  caching            = "None"
}

terraform plan 正在按顺序生成资源,但一旦部署完成,它们在 azure 门户中的填充顺序是随机的。我检查了文档 virtual_machine_data_disk_attachmentmanaged_disk,但它们不是用于这种顺序排序的标志/选项/属性

我也检查了 az disk list,但无法获得太多信息来解决这个问题。

enter image description here

有什么方法可以确保 terraform 生成和附加数据磁盘的顺序类似于 ARM 模板的做法,即按照 LUN 编号的顺序?

解决方法

这里有两个建议:

  1. 您可以考虑使用 Terraform 部署 ARM 模板。阅读this blog了解更多详情。
  2. 参考this blog中的示例,尝试使用countfor_each创建数据盘。

例如:

resource "azurerm_virtual_machine_data_disk_attachment" "managed_disk_attach" {
  count              = length(var.instances) * var.nb_disks_per_instance
  managed_disk_id    = azurerm_managed_disk.managed_disk.*.id[count.index]
  virtual_machine_id = azurerm_linux_virtual_machine.vm.*.id[ceil((count.index + 1) * 1.0 / var.nb_disks_per_instance) - 1]
  lun                = count.index + 10
  caching            = "ReadWrite"
}

或者使用for_each,你可以使用

    locals {
      vm_datadiskdisk_count_map = { for k in toset(var.instances) : k => var.nb_disks_per_instance }
      luns                      = { for k in local.datadisk_lun_map : k.datadisk_name => k.lun }
      datadisk_lun_map = flatten([
        for vm_name,count in local.vm_datadiskdisk_count_map : [
          for i in range(count) : {
            datadisk_name = format("datadisk_%s_disk%02d",vm_name,i)
            lun           = i
          }
        ]
      ])
    }



resource "azurerm_managed_disk" "managed_disk" {
  for_each             = toset([for j in local.datadisk_lun_map : j.datadisk_name])
  name                 = each.key
  location             = azurerm_resource_group.rg.location
  resource_group_name  = azurerm_resource_group.rg.name
  storage_account_type = "Standard_LRS"
  create_option        = "Empty"
  disk_size_gb         = 10
  tags                 = var.tags
}

resource "azurerm_virtual_machine_data_disk_attachment" "managed_disk_attach" {
  for_each           = toset([for j in local.datadisk_lun_map : j.datadisk_name])
  managed_disk_id    = azurerm_managed_disk.managed_disk[each.key].id
  virtual_machine_id = azurerm_linux_virtual_machine.vm[element(split("_",each.key),1)].id
  lun                = lookup(local.luns,each.key)
  caching            = "ReadWrite"
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。