Azure 上的 Terraform、VM 名称和托管数据磁盘不对齐

Terraform on Azure, name of VM and managed data disk is not aligned

我可以将磁盘添加到我的每个 VM,但它们的名称不一致。它造成混乱。

用于创建托管磁盘并将磁盘附加到托管磁盘的 Terraform 代码如下:

resource "azurerm_managed_disk" "tf-mdsk-cluster" {
  count                = 5
  name                 = "${var.ax_base_hostname}-${count.index+1}-DATADISK"
  location             = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
  resource_group_name  = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
  storage_account_type = "Standard_LRS"
  create_option        = "Empty"
  disk_size_gb         = "1024"
}

resource "azurerm_virtual_machine" "tf-vm-cluster-aos" {
  count                 = 5
  name                  = "${var.ax_base_hostname}-${count.index+1}"
  location            = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
  resource_group_name = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
  availability_set_id   = "${azurerm_availability_set.tf-as-cluster-aos.id}"
  network_interface_ids = ["${element(azurerm_network_interface.tf-ni-cluster-aos.*.id, count.index+1)}"]
  vm_size               = "${var.ax_vm_size}"


 storage_data_disk {
   name            = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.name, count.index+1)}"
   managed_disk_id = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.id, count.index)}"
   create_option   = "Attach"
   lun             = 0
   disk_size_gb    = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.disk_size_gb, count.index+1)}"
 }

让我们进行第一次迭代: NXTPREPAOS-1-DATADISK 先创建,然后将其附加到 NXTPREPAOS-1,不知道为什么数据磁盘计数器和 VM 计数器不在同步?

此外,如果我必须为每个 VM 添加另一个 1 TB 的数据磁盘,我的代码块是否会像下面这样?

 resource "azurerm_managed_disk" "tf-mdsk-1-cluster" {
      count                = 5
      name                 = "${var.ax_base_hostname}-${count.index+1}-DATADISK"
      location             = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
      resource_group_name  = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
      storage_account_type = "Standard_LRS"
      create_option        = "Empty"
      disk_size_gb         = "1024"
    }

resource "azurerm_managed_disk" "tf-mdsk-2-cluster" {
      count                = 5
      name                 = "${var.ax_base_hostname}-${count.index+1}-DATADISK2"
      location             = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
      resource_group_name  = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
      storage_account_type = "Standard_LRS"
      create_option        = "Empty"
      disk_size_gb         = "1024"
    }

    resource "azurerm_virtual_machine" "tf-vm-cluster-aos" {
      count                 = 5
      name                  = "${var.ax_base_hostname}-${count.index+1}"
      location            = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
      resource_group_name = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
      availability_set_id   = "${azurerm_availability_set.tf-as-cluster-aos.id}"
      network_interface_ids = ["${element(azurerm_network_interface.tf-ni-cluster-aos.*.id, count.index+1)}"]
      vm_size               = "${var.ax_vm_size}"


     storage_data_disk {
       name            = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.name, count.index+1)}"
       managed_disk_id = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.id, count.index)}"
       create_option   = "Attach"
       lun             = 0
       disk_size_gb    = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.disk_size_gb, count.index+1)}"
     }

     storage_data_disk {
       name            = "${element(azurerm_managed_disk.tf-mdsk-2-cluster.*.name, count.index+1)}"
       managed_disk_id = "${element(azurerm_managed_disk.tf-mdsk-2-cluster.*.id, count.index)}"
       create_option   = "Attach"
       lun             = 1
       disk_size_gb    = "${element(azurerm_managed_disk.tf-mdsk-2-cluster.*.disk_size_gb, count.index+1)}"
     }

引用其他资源时,您不需要将 count.index 递增 1:

name            = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.name, count.index+1)}"
disk_size_gb    = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.disk_size_gb, count.index+1)}"

您的 azurerm_virtual_machine 资源应该如下所示:

resource "azurerm_virtual_machine" "tf-vm-cluster-aos" {
  count                 = 5
  name                  = "${var.ax_base_hostname}-${count.index+1}"
  location            = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
  resource_group_name = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
  availability_set_id   = "${azurerm_availability_set.tf-as-cluster-aos.id}"
  network_interface_ids = ["${element(azurerm_network_interface.tf-ni-cluster-aos.*.id, count.index+1)}"]
  vm_size               = "${var.ax_vm_size}"


 storage_data_disk {
   name            = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.name, count.index)}"
   managed_disk_id = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.id, count.index)}"
   create_option   = "Attach"
   lun             = 0
   disk_size_gb    = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.disk_size_gb, count.index)}"
 }

 storage_data_disk {
   name            = "${element(azurerm_managed_disk.tf-mdsk-2-cluster.*.name, count.index)}"
   managed_disk_id = "${element(azurerm_managed_disk.tf-mdsk-2-cluster.*.id, count.index)}"
   create_option   = "Attach"
   lun             = 1
   disk_size_gb    = "${element(azurerm_managed_disk.tf-mdsk-2-cluster.*.disk_size_gb, count.index)}"
 }

您可能还会发现在这里也使用 list[index] syntax 更可取:

resource "azurerm_virtual_machine" "tf-vm-cluster-aos" {
  count                 = 5
  name                  = "${var.ax_base_hostname}-${count.index+1}"
  location            = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
  resource_group_name = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
  availability_set_id   = "${azurerm_availability_set.tf-as-cluster-aos.id}"
  network_interface_ids = ["${element(azurerm_network_interface.tf-ni-cluster-aos.*.id, count.index+1)}"]
  vm_size               = "${var.ax_vm_size}"


 storage_data_disk {
   name            = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.name, count.index)}"
   managed_disk_id = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.id, count.index)}"
   create_option   = "Attach"
   lun             = 0
   disk_size_gb    = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.disk_size_gb, count.index)}"
 }

 storage_data_disk {
   name            = "${azurerm_managed_disk.tf-mdsk-2-cluster.*.name[count.index]}"
   managed_disk_id = "${azurerm_managed_disk.tf-mdsk-2-cluster.*.id[count.index]}"
   create_option   = "Attach"
   lun             = 1
   disk_size_gb    = "${azurerm_managed_disk.tf-mdsk-2-cluster.*.disk_size_gb[count.index]}"
 }

我发现引用为虚拟机指定的直接名称可提供更一致的结果。让事情保持同步。

resource "azurerm_managed_disk" "tf-mdsk-2-cluster" {
      count                = 5
      name                 = "${azurerm_virtual_machine.tf-vm-cluster-aos[count.index].name}-DATADISK2"
      location             = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
      resource_group_name  = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
      storage_account_type = "Standard_LRS"
      create_option        = "Empty"
      disk_size_gb         = "1024"
    }