Существует политика ARM для проверки существования определенного тега на любой виртуальной машине в Azure:
{
"mode": "Indexed",
"policyRule": {
"if": {
"AllOf": [
{
"field": "type",
"in": [
"microsoft.compute/virtualmachines",
"Microsoft.ClassicCompute/virtualMachines"
]
},
{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
}
]
},
"then": {
"effect": "audit"
}
},
"parameters": {
"tagName": {
"type": "String",
"metadata": {
"displayName": "tagName",
"description": "Tag used to unequally identify a VM"
}
}
}
}
Как создать отдельную политику, одну для Linux, другую для Windows ВМ? Я не могу найти способ фильтрации. Т.е. для Windows я использую этот скрипт политики:
{
"mode": "Indexed",
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
{
"field": "Microsoft.Compute/imagePublisher",
"in": [
"MicrosoftWindowsServer",
"MicrosoftSQLServer"
]
},
{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
}
]
},
"then": {
"effect": "audit"
}
},
"parameters": {
"tagName": {
"type": "String",
"metadata": {
"displayName": "tagName",
"description": "Tag used to help unequally identify a VM"
}
}
}
}
Но выше показаны оба Windows и Linux, так как это логика c как ", если ВМ windows и имеет определенный тег , означает совместимость, в противном случае, если нет определенного тега c или VM равен Linux, обрабатывается как несовместимый ". Я хочу видеть только, сколько виртуальных машин (в соответствии с тегом) совместимо с общим числом Windows виртуальных машин, исключая Linux.
И еще одна политика будет применяться только к Linux виртуальным машинам, исключая Windows.