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

Json 在ARM模板之间共享变量或常量,json,azure,azure-resource-manager,arm-template,Json,Azure,Azure Resource Manager,Arm Template,我想要么定义API版本号——看起来我在所有链接模板中引用的一些模板中不断重复,但看起来我在这样做时遇到了困难,我甚至不确定这是否可行,更不用说如何做到了 例如,intazuredeploy shared.json { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "varia

我想要么定义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(“'u artifactsLocation'),”/ProjectName/Templates/azuredeploy shared json',parameters('u artifactsLocationSasToken'))””
,但我不知道它在哪里、如何以及应该仍然工作。因此,工作指针在这方面受到赞赏。我确实看到了,但不幸的是,我不明白它应该如何工作,也不明白链接的Azure示例。

好的,我认为您可以使用部署输出来实现这一点。。。看起来可能有一个更简单的解决方案,但我想不出一个,因为我对您的场景了解得太多了

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

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

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

只需使用相同的部署名称再次部署步骤#1即可更新常量。这就是你想要的吗?

只是为了确保我了解你的情况。。。您实际上是在尝试从2个json文件中提取参数/变量吗?一个是共享值,另一个是该部署特有的值?@bmoore msft我正在尝试创建一个文件“常量”,我可以将其“包含”在其他文件中,然后使用某个常量变量名引用常量。我注意到我有很多字符串,比如“apiVersion”:“2015-01-01”,我想在工具没有抱怨(比如在本例中)使用“2016-03-30”后立即更新这些字符串。恐怕我错过了一些简单的事情。我设法“包含”了其他片段(使用那里的
concat
东西)并将参数传递给它们,但不是从中传递。也许我应该以某种方式利用
输出
指令..?我认为输出是一种方式。我已经把我的模板扩大了很多,所以需要对它进行一些分解和测试。谢谢你的确认!