当使用Commandlet部署通过主ARM模板通过模板链接的ARM模板New-AzureRmDeployment
时,尝试使用resourceGroup().name
功能和属性时出现错误。错误消息是:
Unable to process template language expressions for resource
'/subscriptions/<subscriptionGuid>/resourceGroups/Zxy-
Test/providers/Microsoft.Resources/deployments/storageDeployment' at line
'29' and column '5'. 'The template function
'RESOURCEGROUP' is not expected at this location.`
作为一种替代方法,我尝试使用resourceId(...)
不带资源组函数调用的函数,但是会给出错误的资源ID,其中缺少资源组信息并且与从Azure门户获取的资源ID不匹配。
例如
"value": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
资源组缺失的结果:
/subscriptions/<subscriptionGuid>/providers/Microsoft.Storage/storageAccounts/linktestdata
这是我所期望的,Azure门户也报告了这一点
/subscriptions/<subscriptionGuid>/resourceGroups/Zxy-Test/providers/Microsoft.Storage/storageAccounts/linktestdata
我以以下内容TestMaster.json
和TestLinked0.json
模板为例来说明问题。
TestMaster.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"linkedTemplateUri": {
"type": "string",
"metadata": {
"description": "URI to the linked ARM template file."
}
}
},
"resources": [
{
"apiVersion": "2018-05-01",
"name": "testMasterDeployment",
"type": "Microsoft.Resources/deployments",
"location": "West US",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[parameters('linkedTemplateUri')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"tagValues": { "value": {
"TagA": "A-Tag",
"TagB": "B-Tag"
}}
}
}
}
],
"outputs": {
"messageFromMaster00": {
"type": "string",
"value": "Master-00 reporting"
},
"messageFromLinkedTemplate": {
"type": "object",
"value": "[reference('testMasterDeployment').outputs.messageFromNestedTemplate]"
}
}
}
TestLinked0.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"defaultValue": "Zxy-Test",
"type": "string"
},
"location": {
"defaultValue": "West US",
"type": "string"
},
"tagValues": {
"type": "object"
}
},
"variables": {
"storageName": "linktestdata"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('location')]",
"name": "[parameters('rgName')]",
"properties": {},
"tags": "[parameters('tagValues')]"
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2017-05-10",
"name": "storageDeployment",
"resourceGroup": "[parameters('rgName')]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2017-10-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"tags": "[parameters('tagValues')]",
"kind": "StorageV2",
"sku": {
"name": "Standard_LRS"
}
}
],
"outputs": {
"storageAccount": {
"type": "string",
"value": "[variables('storageName')]"
},
"resourceInfo0": {
"type": "string",
"value": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
},
"resourceInfo1": {
"type": "string",
"value": "[resourceId(resourceGroup().name, 'Microsoft.Storage/storageAccounts', variables('storageName'))]"
}
}
}
}
}
],
"outputs": {
"messageFromNestedTemplate": {
"type": "object",
"value": "[reference('storageDeployment').outputs]"
}
}
}
用于部署ARM模板的PowerShell:
$uri = 'https://<containername>.blob.core.windows.net/azure-resource-templates/TestMaster.json'
$linkedTemplateUri = 'https://<containername>.blob.core.windows.net/azure-resource-templates/TestLinked0.json'
New-AzureRmDeployment -Location 'West US' -TemplateUri $uri -linkedTemplateUri $linkedTemplateUri
现在,我发现Microsoft文档说“不支持resourceGroup()函数”。有关订购级别的部署,请访问https://docs.microsoft.com/zh-cn/azure/azure-resource-manager/deploy-to-subscription#using-template-functions。我正在使用的commandlet是New-AzureRmDeployment
,用于在当前订阅范围内部署资源。看来我需要采取其他方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句