我如何在 ARM 模板中有条件复制语句

How do I have conditional copy statement in ARM template

我看到了一些如何进行条件复制的示例和答案,但 none 似乎足够灵活,可以使磁盘的数量和大小都变得灵活。我的模板需要参数来标识存储类型和磁盘大小,由 - 分隔,如下所示

DataDiskArray: {
value: [
   "Standard_LRS-64",
   "Standard_LRS-1036"
 ] 
}

只要我至少有一个磁盘就可以正常工作,但是当根本不需要数据磁盘时我很难理解我该怎么做

DataDiskArray: {
value: [ ] 
}

我将 copy[] 语句放入变量中,但它仍在评估并失败

"dataDisks": {
            "copy": [
                {
                    "name": "dataDisks",
                    "count": "[if(equals(length(parameters('DataDiskArray')),0), 1, length(parameters('DataDiskArray')))]",
                    "input": {
                        "caching": "ReadWrite",
                        "diskSizeGB": "[split(parameters('DataDiskArray')[copyIndex('dataDisks')],'-')[1]]",
                        "lun": "[copyIndex('dataDisks')]",
                        "name": "[concat(parameters('VirtualMachineName'), '-DDisk', string(add(copyIndex('dataDisks'),1)))]",
                        "managedDisk": {
                            "storageAccountType": "[split(parameters('DataDiskArray')[copyIndex('dataDisks')],'-')[0]]"
                        },
                        "createOption": "Empty"
                    }
                }
            ]

VM 资源内的资源部署

"dataDisks": "[if(equals(length(parameters('DataDiskArray')),0),json('null'),variables('dataDisks'))]"

首先你的变量声明是错误的,应该是这样的:

"variables": {
    "copy": [
        {
            "name": "blah" <<< name of the created variable
            <<ommited>>
        }
    ]
}

发生这种情况是因为变量总是被评估,也就是说,你只需要调整几乎所有的东西,或者使用 "proxy":

 "proxy": "[if(empty(parameters('DataDiskArray')), variables('fakearray'), parameters('DataDiskArray'))]"
 "fakearray": [
     "Standard_LRS-64"
 ]

然后您将使用相同的副本,但目标是 proxy 变量,而不是 datadiskarray 参数。 (您也可以删除 if 语句)。或者你需要 if 语句在你试图访问 datadiskarray 参数的任何地方