如何使用Terraform代码在azure vm中连接磁盘



我正在尝试创建多个vm和托管磁盘,以便在创建后进行关联。我可以看到磁盘已经创建,并且只与列表中的第一个VM关联。我不知道如何在下面的代码中分配正确的索引号。

我相信Virtual_Machine_id造成了这个问题,有没有人遇到过类似的问题,请提供建议。

resource “azurerm_managed_disk” “app_managed_disk” {
count = “${length(var.data_disk_names)}”
name = “ var.apphostname−{var.data_disk_names[count.index %length(var.data_disk_names)]}”
location = azurerm_resource_group.poc_rg.location
resource_group_name = azurerm_resource_group.poc_rg.name
storage_account_type = var.app_disk_type
create_option = “Empty”
disk_size_gb = “${var.data_disk_sizes[count.index % length(var.data_disk_sizes)]}”
}
resource “azurerm_virtual_machine_data_disk_attachment” “app_disk_attach” {
count = “${length(var.data_disk_names)}”
vm_count = length(var.vm_app_name)
managed_disk_id = “${azurerm_managed_disk.app_managed_disk[count.index % length(azurerm_managed_disk.app_managed_disk)].id}”
virtual_machine_id = azurerm_linux_virtual_machine.app-vm-pas[0].id
lun = “${count.index + 1}”
caching = “ReadWrite”
}
```

您可以循环浏览所有虚拟机和相应的虚拟磁盘,假设您希望创建多个类似连接的磁盘到一组类似的虚拟机

从上面的代码来看,你走的是正确的道路,但在挂载时似乎只引用了第一个VM,这可能对你更好:

variable "cnt" {
default     = 1
description = "instances to be created"
}
variable "managed_disks" {
type = list(map(string))
default = []
}
#cnt=2
#managed_disks = [{
#    storage_account_type : "Premium_LRS"
#    disk_size_gb : "256"
#  }]
resource "azurerm_managed_disk" "default" {
count = length(var.managed_disks)>0?(length(var.managed_disks)*var.cnt):0
name                 = "${var.name}-md-${count.index%var.cnt}-${count.index%length(var.managed_disks)}"
location             = var.location
resource_group_name  = var.resource_group
storage_account_type = coalesce(var.managed_disks[count.index%length(var.managed_disks)].storage_account_type,"StandardSSD_LRS")
create_option        = "Empty"
disk_size_gb         = coalesce(var.managed_disks[count.index%length(var.managed_disks)].disk_size_gb,"64")
tags = merge(
var.tags,
{
}
)
}
resource "azurerm_virtual_machine_data_disk_attachment" "default" {
count = length(var.managed_disks)>0?(length(var.managed_disks)*var.cnt):0
managed_disk_id    = azurerm_managed_disk.default[count.index].id
virtual_machine_id = azurerm_linux_virtual_machine.default[count.index%var.cnt].id
lun                = 1+count.index
caching            = "ReadWrite"
}

有了这一点,您应该能够调出一组虚拟机,其中每个虚拟机都有相应的类似定义的托管磁盘。

最新更新