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

时间:2019-01-10 21:02:08

标签: azure azure-resource-manager

我看到了一些示例并回答了如何进行条件复制,但是似乎没有足够的灵活性来使磁盘的数量和大小都具有灵活性。我的模板需要一个参数,该参数标识存储类型和以-分隔的磁盘大小,如下所示

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'))]"

1 个答案:

答案 0 :(得分:0)

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

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

发生这种情况是因为总是对变量进行求值,也就是说,您只需要调节所有条件,或者使用“代理”:

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

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