【发布时间】:2022-06-15 18:55:00
【问题描述】:
我正在使用 Terraform 来预配 Azure VM。除了安装数据磁盘的 Azure DSC 扩展外,一切似乎都运行良好。我向 DSC 提供以下详细信息以将两个数据磁盘挂载到 vm。
{ "AllocationUnitSize":"4", "驱动器号":"E", “标签”:“二进制文件”, “缓存”:“无”, "disk_size_gb":"32", “伦”:“0”, "managed_disk_type":"标准SSD_LRS", “write_accelerator_enabled”:“假” }
{ "AllocationUnitSize":"64", "驱动器号":"F", “标签”:“数据”, "缓存":"只读", "disk_size_gb":"256", “伦”:“1”, "managed_disk_type":"标准SSD_LRS", “write_accelerator_enabled”:“假” }
但是如果我在运行 DSC 后检查虚拟机上的磁盘,32GB 磁盘会得到 Drive letter F: Label Data, Allocation unit 64 which提供256GB数据盘。
如果我有两个以上的数据磁盘,则 DSC 会随机安装它们,并假设其他磁盘的详细信息。
以下是用于配置 DSC 扩展的 terraform 代码 sn-p,
resource azurerm_virtual_machine_extension "vm_extention" {
lifecycle {
ignore_changes = [ settings, protected_settings ]
}
name = "DesireStateConfiguration"
virtual_machine_id = var.vm_id
publisher = "Microsoft.Powershell"
type = "DSC"
type_handler_version = "2.80"
auto_upgrade_minor_version = false
settings = <<SETTINGS
{
"wmfVersion" : "latest",
"configuration": {
"url" : "${var.DSC_config.url}",
"script" : "${var.DSC_config.script}",
"function" : "${var.DSC_config.function}"
},
"configurationArguments": {
"DataDisks" : ${jsonencode( var.disk_configurations )},
"mountDisks" : ${var.mountDisks}
}
}
SETTINGS
protected_settings = <<PROTECTED_SETTINGS
{
"configurationUrlSasToken" : "${var.sas_token}"
}
PROTECTED_SETTINGS
}
仅供参考:如果我检查 terraform 状态文件,它会在我输入 DSC 时显示正确的信息,并且在我登录 VM 以检查磁盘安装详细信息之前似乎没有任何问题。
更新:
我还注意到,当 LUN 编号未按顺序显示在门户 screenshot 上时,会发生此问题
我们使用磁盘编号来获取磁盘 ID 以传递给 DSC 脚本以进行磁盘装载,如下所示。
foreach( $disk in $disks )
{
$lun = [int]$disk.Lun
$query = "SELECT Index FROM Win32_DiskDrive WHERE InterfaceType='SCSI' AND SCSILogicalUnit='" + $lun + "'"
$diskId = ( Get-CimInstance -Query $query ).Index
$partitionStyle = ( Get-Disk -Number $diskId -ErrorAction Stop ).PartitionStyle
if ( $partitionStyle -ieq "RAW" )
{
WaitForDisk "LUN_$lun"
{
DiskId = [uint32]$diskId
RetryIntervalSec = 20
RetryCount = 7
}
Disk "LUN_$lun"
{
DriveLetter = $disk.DriveLetter
DiskId = [uint32]$diskId
FSLabel = $disk.Label
AllocationUnitSize = [float]$disk.AllocationUnitSize
DependsOn = "[WaitForDisk]LUN_$lun"
}
} else { Write-Output "Disk is already mounted" }
}
如果 LUN 编号在门户上以正确的顺序显示,则上述脚本可以正常工作并按预期安装磁盘。我正在使用 azurerm_virtual_machine_data_disk_attachment 挂载数据磁盘,但找不到任何控制 LUN 顺序的方法。
【问题讨论】:
-
能否请您分享完整的代码,以便在我的环境中进行测试。
-
@RahulKumarShaw-MT 感谢您回复这个问题。我已经通过一些更新编辑了主要问题。
标签: azure terraform azure-virtual-machine terraform-provider-azure