【问题标题】:Sharing variables, or constants, between ARM templates在 ARM 模板之间共享变量或常量
【发布时间】:2016-04-03 21:21:03
【问题描述】:

我正在考虑定义 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 部分。这让我想知道我是否引用了错误的 schema 或者是否应该引用一个。如果我创建了一些我认为是虚拟资源的东西并且假设这个想法有效,那么azuredeploy.json 应该如何引用这个文件?

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

【问题讨论】:

  • @bmoore-msft 我正在尝试创建一个文件“常量”,我可以将其“包含”在其他文件中,然后使用一些常量变量名引用常量。我注意到我有很多字符串,例如“apiVersion”:“2015-01-01”,一旦工具没有抱怨,我想立即更新它们,例如,在这种情况下使用 ” 2016-03-30"。恐怕我错过了一些简单的事情。我设法“包含”了其他片段(使用那里的 concat 东西)并将参数传递给它们,但不是来自它们。也许我应该以某种方式利用outputs 指令..?

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


【解决方案1】:

好的,我认为您可以使用部署输出来执行此操作...似乎可能有一个更简单的解决方案,但就我对您的场景的理解而言,我想不出一个。

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

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

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

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

【讨论】:

  • 我认为输出是要走的路。我的模板已经很大了,所以需要对其进行分解并进行测试。感谢您确认!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2015-05-16
  • 2022-11-30
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多