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"
}
我可以将磁盘添加到我的每个 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"
}