使用ARM模板跨部署插槽共享网站配置

时间:2016-09-06 12:02:45

标签: arm-template

我在ARM模板中配置了几个webapps,我发现我必须拥有大量重复代码才能在多个部署插槽中维护单个配置。必须分别复制和维护依赖项和属性。我研究了使用变量,但是我的很多配置依赖于其他资源,并且在评估变量时无法进行评估。

理想情况下,我希望所有插槽都引用相同的“Microsoft.Web / sites / config”对象,但我看不到这样做的方法。我当前的部署脚本看起来像这样(虽然这已大规模简化,但实际上我有更多的属性)

 #Getting N and M from input
 NM=map(int, raw_input().split())
 arr=[]

 for i in xrange(NM[0]):
     c=map(int, raw_input().split())
     arr.append(c)

有没有办法让这个模板更易于维护?

1 个答案:

答案 0 :(得分:1)

也许您可以在模板中使用copy

将插槽中的部分移动到模板中的根级别,然后添加:

"copy": {
    "name": "slotcopy",
    "count": "[length(parameters('webSiteSlots'))]"
},

名称属性应该如下所示:

"name": "[concat(parameters('webSiteName'), '/', parameters('webSiteSlots')[copyIndex()].name)]",

有了这个,你说这个资源将是WebSite资源的子代。有关此here的更多信息。

现在您可以将带有复杂对象数组的参数添加到模板中:

"webSiteSlots": {
    "type": "array",
    "minLength": 0,
    "defaultValue": []
}

在您的参数文件中,您现在可以使用一些其他值设置要包含的插槽集合:

"webSiteSlots": {
    "value": [
        {
            "name": "Staging",
            "environment": "Production"
        }
    ]
}

要使用这些给定的值,您可以执行以下操作:

"properties": {
    "ASPNETCORE_ENVIRONMENT": "[parameters('webSiteSlots')[copyIndex()].environment]"
}

这应该会减少相关的代码。

问候, KIRK

相关问题