gpt4 book ai didi

azure - 我可以拥有一个 COPY 数组为 0 到 N 的 ARM 模板资源吗

转载 作者:行者123 更新时间:2023-12-03 22:22:56 26 4
gpt4 key购买 nike

我正在部署一个 ARM 模板,该模板使用复制资源 block 将 1 个或多个数据磁盘部署到虚拟机。我想做的就是将其更改为 0 或更多。

我使用的参数是

    "VirtualMachineDiskSizeArray": {
"type": "array",
"defaultValue": [ "100" ]
},

然后在资源中调用:

   "resources": [
{
"name": "[parameters('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2016-04-30-preview",
"location": "[parameters('rgLocation')]",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', parameters('rgStorageAccountName'))]"
],
"properties": {
"osProfile": { ... },
"hardwareProfile": { ... },
"storageProfile": {
"imageReference": { ... },
"osDisk": { ... },
"copy": [
{
"name": "dataDisks",
"count": "[length(parameters('VirtualMachineDiskSizeArray'))]",
"input": {
"lun": "[copyIndex('dataDisks')]",
"name": "[concat(parameters('vmDataDiskNameStub'), add(copyIndex('dataDisks'),1), '.vhd')]",
"diskSizeGB": "[parameters('VirtualMachineDiskSizeArray')[copyIndex('dataDisks')]]",
"createOption": "Empty",
"vhd": {
"uri": "[concat(concat(reference(resourceId(parameters('rgName'), 'Microsoft.Storage/storageAccounts', parameters('rgStorageAccountName')), '2015-06-15').primaryEndpoints['blob'], 'vhds/'), concat(parameters('vmDataDiskNameStub'), add(copyIndex('dataDisks'),1), '.vhd') )]"
}
}
}
]
}
}
},

但是,当我传入一个包含 0 个元素的数据磁盘数组时,我收到此错误,正如预期的那样:

Validation returned the following errors:
: Deployment template validation failed: 'The template 'copy' definition at line '0' and column '0' has an invalid copy count. The co
py count must be a postive integer value and cannot exceed '800'. Please see https://aka.ms/arm-copy for usage details.'.

Template is invalid.

我想尝试以某种方式解决这个问题 - 我尝试在副本上添加一个条件:

"condition": "[  greater(length(parameters('VirtualMachineDiskSizeArray')), 0)]",

但这返回了相同的错误。

我正在研究嵌套模板,但这对于资源的部分来说看起来不太好。

最佳答案

解决这个问题的最简单方法是使用这个:

{
"condition": "[if(equals(parameters('numberOfDataDisks'), 0), bool('false'), bool('true'))]",
"apiVersion": "2017-03-30",
"type": "Microsoft.Compute/virtualMachines",
"name": "[variables('vmName')]",
"location": "[resourceGroup().location]",
"properties": {
"storageProfile": {
"imageReference": { xxx },
"osDisk": { xxx },
"copy": [
{
"name": "dataDisks",
"count": "[if(equals(parameters('numberOfDataDisks'), 0), 1, parameters('numberOfDataDisks'))]",
"input": {
"diskSizeGB": "1023",
"lun": "[copyIndex('dataDisks')]",
"createOption": "Empty"
}
}
]
}
}
}

这将解决您传递 0 个数据磁盘并且同时不会部署此虚拟机的事实。您所需要做的就是添加另一个虚拟机资源。但它必须使用不同的名称(否则模板将失败),或者您可以使用嵌套模板来部署具有相同名称的虚拟机。

这可以通过最近对 if() 函数的修复来改进,您也可以随时通过使用嵌套部署来解决

关于azure - 我可以拥有一个 COPY 数组为 0 到 N 的 ARM 模板资源吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45923848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com