azure arm 模板可用区配置 - IF 语句不通过空值/空值

Posted

技术标签:

【中文标题】azure arm 模板可用区配置 - IF 语句不通过空值/空值【英文标题】:azure arm template Availability zone config - IF statement not passing through null/empty value 【发布时间】:2021-12-18 18:43:43 【问题描述】:

尝试对使用 arm 模板部署 vm 的 ps1 脚本进行一些额外的调整。

脚本询问是否需要可用区域,如果需要,则为您提供可用区域选项。 如果不需要,则将 $zone 变量设置为 defaultvalue 或 null,然后在 arm 模板中使用该值来部署没有任何可用区的 vm。

我的 template.json 文件包含该区域的以下参数。

"availabilityZone": 
  "type": "array",
  "defaultValue": []

IF 语句包含

   "zones": "[if(empty(parameters('availabilityZone')), json('[]'), array(parameters('availabilityZone')))]"

我也尝试过使用以下方法,但它不起作用

json('null') 

如果我对可用区进行硬编码,那么它会相应地进行部署。 如果将可用区排除在部署之外,它将部署到可用区 1。

如果 $zone 设置为 0、$null 或留空,则失败并显示

错误:代码=InvalidDeploymentParameterValue; Message=部署参数“availabilityZone”的值为空。请指定值或使用参数引用。

我错过了什么?

干杯

【问题讨论】:

如果没有通过 PowerShell 脚本传递参数,则 ARM 模板选择默认值。您可以参考this 文档以使用 PowerShell 内联参数传递参数值。 您可以在 ARM 模板中使用 if 条件 - docs.microsoft.com/en-us/azure/azure-resource-manager/templates/… 谢谢大家...我会看看,看看我能不能弄清楚。我很快就会有一些问题!...谢谢! 我尝试了以下... "zones": [ "if(empty(parameters('availabilityZone')),parameters('availabilityZone'),array(parameters('availabilityZone'))) " ] 但无法让它工作......我错过了什么? 也试过这个“区域”:“[if(not(empty(parameters('availabilityZone'))), reference(parameters('availabilityZone'), json('null'))]”但收到一条错误消息说 14:57:51 - 错误:代码=无效模板;消息=部署模板语言表达式评估失败:'无法解析语言表达式 |'if(not(empty(parameters('availabilityZone'))),参考(参数('availabilityZone'),json('null'))':预期令牌'RightParenthesis'和|实际'EndOfData'。'。有关使用详情,请参阅aka.ms/arm-template-expressions。 【参考方案1】:

property zone 是一个数组,你可以通过传递空数组 '[]' 来实现你所需要的

【讨论】:

嘿,伙计...你能告诉我正确的代码吗?

以上是关于azure arm 模板可用区配置 - IF 语句不通过空值/空值的主要内容,如果未能解决你的问题,请参考以下文章

是否可以通过 ARM 模板将分配的 Azure DSC 配置更新到 VM?

Azure Service Fabric ARM 模板预配失败

Azure函数的ARM模板文档

自定义配置脚本 Azure 资源管理器模板

Azure ARM - DSC VM 配置

Azure ARM-DSC VM配置