我如何在 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
参数的任何地方
我看到了一些如何进行条件复制的示例和答案,但 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
参数的任何地方