【发布时间】:2017-08-31 11:06:43
【问题描述】:
我有一个有条件地创建资源的 ARM 模板:
{
"type": "Microsoft.Storage/storageAccounts",
"sku": {
"name": "Standard_GRS",
"tier": "Standard"
},
"kind": "BlobStorage",
"name": "[variables('storageAccounts_name')]",
"condition": "[equals(parameters('is_Not_Development'), 'True')]",
"apiVersion": "2017-06-01",
"location": "[resourceGroup().location]",
"scale": null,
"properties": {
"accessTier": "Hot"
},
"dependsOn": []
},
在我的输出参数中,如果未创建资源,则会导致错误:
"storageAccountConnectionString": {
"type": "string",
"value": "[Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccounts_name'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccounts_name')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]"
},
我试过这个:
"storageAccountConnectionString": {
"type": "string",
"condition": "[equals(parameters('is_Not_Development'), 'True')]",
"value": "[Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccounts_name'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccounts_name')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]"
},
带有条件子句,但无法识别。如何使输出参数有条件?
更新:
我尝试了以下方法:
"storageAccountConnectionString": {
"type": "string",
"value": "[if(equals(parameters('is_Not_Development'),'False'),'null',Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccounts_name'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccounts_name')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value))]"
},
但它给了我同样的错误信息,它必须同时评估真假条件。
【问题讨论】:
-
我在 Azure ARM 模板中使用 IF 语句的体验非常糟糕。 (见stackoverflow.com/questions/45923848/…)。基本上,IF 的两边(真/假)都会得到评估。目前我发现没有办法解决这个问题。
-
我为此添加了一个 Azure UserVoice 项目:feedback.azure.com/forums/34192--general-feedback/suggestions/…
-
这里有一个功能请求来解决这个问题:feedback.azure.com/forums/281804-azure-resource-manager/…
标签: azure arm-template