所以我设法实现了它。可能不是最优雅的,但它确实有效。尽管 Microsoft seem to suggest using a top-level resource 创建数据磁盘,但我看不出这是如何工作的,因为我不知道在 DependsOn[] 中使用 copy[] 的方法,如果您在同一空间中创建磁盘和虚拟机,这是必需的模板,他们将尝试同时部署。
对于那些可能感兴趣的人,这是我的解决方案:
首先,我使用 PowerShell 的 New-AzureRmResourceDeployment 触发模板。我没有使用参数文件。参数在 PS 中生成。
$RG = "ResourceGroup where VM resides"
$Disks = @(
@{name = "datadisk-001";diskSizeGB = "256";lun = 0}
@{name = "datadisk-002";diskSizeGB = "256";lun = 1}
@{name = "datadisk-003";diskSizeGB = "512";lun = 2}
@{name = "datadisk-004";diskSizeGB = "512";lun = 3}
@{name = "datadisk-005";diskSizeGB = "512";lun = 4}
@{name = "datadisk-006";diskSizeGB = "512";lun = 5}
)
$params = @{
diskConfig = $disks
storageAccounttype = "Standard_LRS"
vmName = "AUCADN102007006"
}
New-AzureRmResourceGroupDeployment -Name "SomeDeploymentName" `
-ResourceGroupName $RG `
-Mode Incremental `
-DeploymentDebugLogLevel All `
-TemplateFile C:\Temp\DiskTest.json" `
-Verbose `
@params
模板本身被严重削减,实际上并没有创建虚拟机。引用的 VM 需要存在。我已经尽可能地取出了。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"type": "string"
},
"diskConfig": {
"type": "array"
},
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Premium_LRS"
],
"metadata": {
"description": "Type of disk"
}
}
},
"variables": {
"vmSize": "Standard_DS4_v2",
"sharedVariables": {
"storageAccountType": "[parameters('storageAccountType')]"
}
},
"resources": [
{
"apiVersion": "2017-03-30",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[resourceGroup().location]",
"dependsOn": [
],
"properties": {
"storageProfile": {
"copy": [
{
"name": "dataDisks",
"count": "[length(parameters('diskConfig'))]",
"input": {
"name": "[concat(parameters('vmName'),'-',parameters('diskConfig')[CopyIndex('dataDisks')].name)]",
"diskSizeGB": "[parameters('diskConfig')[CopyIndex('dataDisks')].diskSizeGB]",
"lun": "[parameters('diskConfig')[copyIndex('dataDisks')].lun]",
"createOption": "Empty",
"managedDisk": {
"storageAccountType": "[variables('sharedVariables').storageAccountType]"
}
}
}
]
}
}
}
],
"outputs": {
"arrayOutput1": {
"type": "array",
"value": "[parameters('diskConfig')]"
},
"arrayCount": {
"type": "int",
"value": "[length(parameters('diskConfig'))]"
}
}
}
感谢this的帖子,作者在其中演示了索引的使用:
"properties": {
"accountType": " [parameters('storageAccountList')[copyIndex()].storageAccountType]"
}
注意 copyIndex() 在 [ ]
待办事项:使用$Disks 做一些更好的事情,使用 PS 创建哈希表或在模板中创建它。
HTH