azure - 在 Bicep 或 ARM 中,如何检测策略规则部分中仅为空格的参数值?

标签 azure azure-resource-manager azure-bicep

我正在使用 Bicep,但我了解旧的 ARM JSON 语法,足以在有人知道一个但不知道另一个的情况下适应解决方案。不管怎样,我可以通过在我的一个policyRule对象中执行此操作来轻松判断参数值是否为空字符串:

policyRule: {
  if: {
    {
        field: '[concat(\'tags[\', parameters(\'tagName\'), \']\')]'
        equals: ''
    }
  }
...rest of rule and then statement
}

或使用 exists: false 测试存在性

但是我如何检查该值是否只是一堆空格,例如 "" ?我尝试将 field: value 修改为:

[trim(concat(\'tags[\', parameters(\'tagName\'), \']\'))]

但它似乎不起作用。我仍然可以输入一堆空格并使其通过验证。

最佳答案

Trim 仅删除前导和尾随空白,我也给出了与您使用的相同的空白。

这将从参数值中删除任何前导或尾随空格,然后再检查参数值是否为空。如果参数值仅包含空格字符,trim 函数会将其转换为空字符串,从而触发 equals: " 条件并使策略检查失败。

policyRule: { 
if: { 
{
 field: '[trim(concat(\'tags[\', parameters(\'tagName\'), \']\'))]' 
 equals: ''
  } 
 }
 }

但是,您需要将 replace 函数与正则表达式结合使用,以删除参数值中的所有空白字符。

您可以修改策略规则,如下所示:

policyRule: {
 if: {
  {
   field: '[replace(concat(\'tags[\', parameters(\'tagName\'), \']\'), \'\\s\', \'\')]' 
    equals: ''
    } 
  }
  }

关于azure - 在 Bicep 或 ARM 中,如何检测策略规则部分中仅为空格的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75744720/

相关文章:

python - ValueError : Cannot serialize: <myproject. storage.AzureStorage 对象位于 0x7f85185e66d0>

azure - 获取虚拟网络中的IP地址

java - 通过存储uri获取azure订阅id

azure - 为 Application Insights 设置诊断设置

azure - 部署 Key Vault 访问策略时如何在 Bicep 中引用系统分配的身份

azure - 如何使用ARM模板在云服务上添加诊断扩展

azure-resource-manager - 在 ARM 中获取连接字符串

azure - BICEP 中的 MAP 类型参数/变量?

azure - 函数未使用 ARM 模板在 Azure 函数应用程序内创建

azure - 使用 Bicep 部署带有电子邮件服务和托管域的 Azure 通信服务时出错