在ARM模板之间共享变量或常量

时间:2016-04-03 21:21:03

标签: json azure azure-resource-manager arm-template

我正在考虑定义API版本号,看起来我在所有链接模板中引用的某个模板中不断重复,但看起来我很难这样做而且我不确定这是否应该是甚至可能更不用说怎么做了。

例如,int azuredeploy-shared.json我可以做类似

的事情
{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "variables": {
    "apiVersion": {
        "resources": { "deployments": "2015-01-01" }
    }
  }
}

然后在azuredeploy.json我可以像

一样使用它
resources": [
{
    "name": "someResource",
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "[variables('apiVersion').resources.deployments]",

第一个绊脚石需要resources部分。它让我想知道我是否引用了错误的架构或者应该引用一个架构。如果我创建了一些我认为是虚拟资源的东西并且提供了这个想法,那么azuredeploy.json应该如何引用这个文件?

我可以做"[concat(parameters('_artifactsLocation'), '/ProjectName/Templates/azuredeploy-shared-json', parameters('_artifactsLocationSasToken'))]"之类的事情,但我不知道它在哪里或如何以及它是否仍然有效。所以,工作指针在这方面表示赞赏。我确实看到了How to pass variables between templates - ARM json,但遗憾的是我并不了解它应该如何工作,也不知道链接的Azure示例。

1 个答案:

答案 0 :(得分:2)

好的,我认为你可以使用部署输出来做到这一点......似乎可能有一个更简单的解决方案,但我不能想到一个我理解你的场景。

1)部署包含所有常量的模板,并将这些常量设置为该部署的输出

2)在要访问它们的模板部署中,使用引用函数,例如

reference('/subscriptions/{GUID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}','2015-01-01').outputs.{nameOfConstant}.value]"

再次使用相同的部署名称再次部署步骤#1以更新常量。这就是你要追求的吗?