如果条件未评估为真,是否有可能使 ARM 部署失败?
Is it possible to fail an ARM deployment if condition does not evaluate to true?
我正在构建一组 ARM 模板来部署我的应用程序所需的所有资源,我在参数文件中指定了一个 environmentPrefix
参数,并在所有资源名称前加上前缀环境前缀。最终结果是,例如,开发环境中基本名称为 service1
的应用程序服务将获得资源名称 dev-service1
.
给定环境的资源应部署到具有相同环境前缀的资源组中,例如,dev-core-services
。
如果 RG 名称不以参数文件 environmentPrefix
开头,我希望模板部署失败。例如,如果您使用定义 environmentPrefix = dev
的参数文件将模板部署到名为 prod-core-services
的 RG 中,部署将失败。
我知道我可以在单个资源上放置一个 condition
元素,看起来像这样,
"condition": "[if(startsWith(resourceGroup().name, concat(parameters('EnvironmentPrefix'), '-')), bool('true'), bool('false'))]",
但是如果我对所有资源都这样做,模板部署会在它实际上没有部署任何东西时说它成功了 - 因为它们的 condition
元素都评估为 false。
对于如何在这种情况下部署失败有什么想法吗?
(我知道还有其他方法可以安全地执行此操作,例如针对生产与开发的不同订阅,或者使用具有不同访问权限的不同服务原则进行部署等,但这是我必须使用的目前:-(
您可以创建一个 100% 失败的资源,并仅在您的条件失败时部署它,但我认为您应该查看 ARM 政策,这是他们创建的目的。
看看这个问题:
我正在构建一组 ARM 模板来部署我的应用程序所需的所有资源,我在参数文件中指定了一个 environmentPrefix
参数,并在所有资源名称前加上前缀环境前缀。最终结果是,例如,开发环境中基本名称为 service1
的应用程序服务将获得资源名称 dev-service1
.
给定环境的资源应部署到具有相同环境前缀的资源组中,例如,dev-core-services
。
如果 RG 名称不以参数文件 environmentPrefix
开头,我希望模板部署失败。例如,如果您使用定义 environmentPrefix = dev
的参数文件将模板部署到名为 prod-core-services
的 RG 中,部署将失败。
我知道我可以在单个资源上放置一个 condition
元素,看起来像这样,
"condition": "[if(startsWith(resourceGroup().name, concat(parameters('EnvironmentPrefix'), '-')), bool('true'), bool('false'))]",
但是如果我对所有资源都这样做,模板部署会在它实际上没有部署任何东西时说它成功了 - 因为它们的 condition
元素都评估为 false。
对于如何在这种情况下部署失败有什么想法吗?
(我知道还有其他方法可以安全地执行此操作,例如针对生产与开发的不同订阅,或者使用具有不同访问权限的不同服务原则进行部署等,但这是我必须使用的目前:-(
您可以创建一个 100% 失败的资源,并仅在您的条件失败时部署它,但我认为您应该查看 ARM 政策,这是他们创建的目的。
看看这个问题: