如果条件未评估为真,是否可能导致ARM部署失败?

时间:2018-10-31 06:14:32

标签: azure arm-template

我正在构建一组ARM模板来部署我的应用程序所需的所有资源,并在参数文件中指定一个environmentPrefix参数,并在所有资源名称前添加环境前缀。最终结果是,例如,开发环境中的基础名称为service1的应用程序服务将获得资源名称为dev-service1

应将给定环境的资源部署到具有相同环境前缀(例如dev-core-services)的资源组中。

如果RGs名称不是以参数文件environmentPrefix开头,我想使模板部署失败。例如,如果使用定义environmentPrefix = dev的参数文件将模板部署到名为prod-core-services的RG中,部署将失败。

我知道我可以在看起来像这样的单个资源上放置一个condition元素,

"condition": "[if(startsWith(resourceGroup().name, concat(parameters('EnvironmentPrefix'), '-')), bool('true'), bool('false'))]",

但是,如果我对所有资源都这样做,则模板部署将说它实际上没有部署任何东西时就成功了-因为它们的condition元素都被评估为false。

有什么主意如何在这种情况下使部署失败?

(我知道还有其他方法可以安全地执行此操作,例如针对prod vs dev进行不同的订阅,或者使用具有不同访问权限的不同服务原理进行部署等,但这是我必须使用的方法时刻:-(

1 个答案:

答案 0 :(得分:1)

您可以创建一个资源,该资源将100%失败,并且仅在条件失败时才部署它,但是我认为您应该研究ARM策略,这是它们创建的目的。

看看这个问题:
How can I create an Azure policy that validates Resource Group Names