我正在努力创建 Azure Policy 示例的参数化版本,它将应用于资源组的标签复制到其中的任何资源。这是我用作灵感的示例:https ://github.com/Azure/azure-policy/tree/master/samples/ResourceGroup/copy-resourcegroup-tag ,即:
{
"if": {
"field": "tags.example",
"exists": "false"
},
"then": {
"effect": "append",
"details": [
{
"field": "tags.example",
"value": "[resourceGroup().tags.example]"
}
]
}
}
我们向资源组添加了许多标签,出于计费目的,我需要确保将这些标签应用于其中的所有资源。我希望多次创建一个包含相同策略的倡议,每次都使用不同的参数化标签名称。我的示例策略的参数化版本如下所示:
"parameters": {
"tagName": {
"type": "String",
"metadata": {
"displayName": "Tag name",
"description": "The tag to copy to child resources"
}
}
},
"policyRule": {
"if": {
"field": "[concat('tags.', parameters('tagName'))]",
"exists": "false"
},
"then": {
"effect": "append",
"details": [
{
"field": "[concat('tags.', parameters('tagName'))]",
"value": "[concat('resourceGroup().tags.', parameters('tagName'))]"
}
]
}
}
当政策适用时,我得到不合规的结果。查看合规性详细信息显示:
不合规原因
当前值必须存在。
字段
tags.ApplicationName
当前值
--
资源组上有一个名为ApplicationName的标记,其值为。文档说“当前值必须存在”的原因是存在条件。这似乎与我期望它起作用的方式有悖常理——我知道它不存在,这就是我要设置该值的原因。
除了分配策略并等待几个小时得到结果之外,还有什么方法可以调试这些?
谢谢你的帮助!