Политика и инициатива для копирования тегов на ресурсы в группе ресурсов - PullRequest
0 голосов
/ 25 апреля 2019

Я изо всех сил пытаюсь создать параметризованную версию примера политики Azure, которая копирует теги, примененные к группе ресурсов, в любые ресурсы внутри нее. Вот пример, который я использую как вдохновение: 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 со значением в группе ресурсов. Документация говорит, что причина "Текущее значение должно существовать" - это условие существующие . Кажется, это противоречит тому, как я ожидаю, что это сработает - я знаю, что его не существует, поэтому я хочу установить значение.

Есть ли способ отладить их, кроме назначения политики и ожидания результата в течение нескольких часов?

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 25 апреля 2019

Я понял это, мой синтаксис был неправильным, мне нужно ссылаться на теги, используя ключи, а не атрибуты, то есть теги ['ApplicationName'] вместо tags.ApplicationName . Свойство policyRule должно быть:

"policyRule": {
  "if": {
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "exists": "false"
  },
  "then": {
    "effect": "append",
    "details": [
      {
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "value": "[resourceGroup().tags[parameters('tagName')]]"
      }
    ]
  }
}

Я также неправильно понял, как работает эта функция, похоже, что политики с эффектом добавления могут добавляться только в момент создания ресурса, а не ретроспективно на существующий ресурс. Приведенная выше политика добавляет теги для новых ресурсов, но приводит к «несовместимому» отчету для существующего ресурса.

Это поведение является документированным здесь :

«Когда определение политики, использующее эффект добавления, запускается как часть цикла оценки, оно не вносит изменений в уже существующие ресурсы. Вместо этого оно помечает любой ресурс, который удовлетворяет условию if, как несовместимый».

...