我有一个需求,我需要创建多个Azure Windows虚拟机,其中有多个磁盘,每个磁盘都具有不同的大小,并将每个虚拟机放置在不同的AZ中(因此,如果我传入3个VM名称,每个名称将与磁盘一起转到不同的AZ )。
当我需要分配不同大小的磁盘时,我已经让相同大小的磁盘工作了。
提前感谢您的帮助。
到目前为止,我有以下代码:
variable "instances" {
description = "No. of instances"
type = list(string)
default = ["vm-1", "vm-2"]
}
variable "nb_disks_per_instance" {
description = "No. disks per vm"
type = number
default = 2
}
variable "disks" {
description = "disk sizes"
type = list(number)
default = [10, 20, 30]
}
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("%s_Data_Disk_%02d", vm_name, i)
lun = i
}
]
])
}
output "myMap" {
value = local.datadisk_lun_map
}
resource "azurerm_managed_disk" "managed_disk" {
for_each = toset([for j in local.datadisk_lun_map : j.datadisk_name])
name = replace(each.key, "_", "-")
location = "UK South"
resource_group_name = "rg-one"
storage_account_type = "Standard_LRS"
create_option = "Empty"
disk_size_gb = 20
tags = local.common_tags
zones = ["1"]
}
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_windows_virtual_machine.vm[element(split("_", each.key), 0)].id
lun = lookup(local.luns, each.key)
caching = "ReadWrite"
}
resource "azurerm_network_interface" "nic" {
for_each = toset(var.instances)
location = "UK South"
name = "${each.key}-NIC"
resource_group_name = "rg-one"
ip_configuration {
name = "internal"
private_ip_address_allocation = "Dynamic"
subnet_id = data.azurerm_subnet.subnet.id
}
tags = local.common_tags
}
resource "azurerm_windows_virtual_machine" "vm" {
for_each = toset(var.instances)
admin_password = <ENTER PW>
admin_username = "test"
location = "UK South"
name = each.key
network_interface_ids = [azurerm_network_interface.nic[format("%s", each.key)].id]
resource_group_name = "rg-one"
size = "Standard_D4s_v4"
tags = local.common_tags
zone = index(var.instances, each.value) + 1
os_disk {
caching = "ReadWrite"
storage_account_type = "Premium_LRS"
name = "${each.key}-OS-DISK-00"
}
} 发布于 2021-03-02 10:40:58
按照您的方式,创建一个具有多个磁盘的VM很容易,但创建具有不同大小和数量的磁盘的多个VM却很困难。最好的方法是使用Terraform模块。
该模块类似于您用于创建具有多个磁盘的一个VM的方法,因此我将只向您展示如何使用该模块:
variable "vms" {
type = map(object({
size = string
admin_user = string
admin_password = string
disks = list(number)
}))
}
module "vms" {
for_each = var.vms
source = "./modules/vm"
resource_group_name = var.rg_name
vm_name = each.key
vm = each.value
disks = each.value["disks"]
location = var.location
}terraform.tfvar
rg_name = "charlesVMs"
location = "East US"
vms ={
azurevm1 = {
size = "Standard_DS1_v2"
admin_user = "azureuser"
admin_password = "azureuser@2021"
disks = [30, 30]
}
}这个例子只是提供了一个方向来解决你的需求,获取关于另一个issue的更多细节。如果你有任何关于这个问题的问题,请让我知道,我很乐意帮助你。
https://stackoverflow.com/questions/66419797
复制相似问题