Добавление политики тегов не работает для некоторых ресурсов - PullRequest
2 голосов
/ 10 мая 2019

Я создаю одну политику Azure для добавления тегов во вновь созданные ресурсы, она работает хорошо для большинства компонентов, но я обнаружил, что эта политика не работает для некоторых компонентов, например: логических приложений.

{
  "mode": "All",
  "parameters": {
    "Environment": {
      "type": "String",
      "metadata": {
        "displayName": "Environment"
      },
      "defaultValue": "dev"
    },
    "Owner": {
      "type": "String",
      "metadata": {
        "displayName": "Owner"
      },
      "defaultValue": "Admin"
    },
    "CostCenter": {
      "type": "String",
      "metadata": {
        "displayName": "CostCenter"
      },
      "defaultValue": "NA"
    }
  },
  "policyRule": {
    "if": {
      "field": "tags",
      "exists": "false"
    },
    "then": {
      "effect": "append",
      "details": [
        {
          "field": "tags",
          "value": {
            "Environment": "[parameters('Environment')]",
            "Owner": "[parameters('Owner')]",
            "CostCenter": "[parameters('CostCenter')]"
          }
        }
      ]
    }
  }
}

Я добавил аналогичную политику для применения тегов к группам ресурсов, вообще не работает, я понятия не имею, что происходит.

{
  "mode": "All",
  "parameters": {
    "Environment": {
      "type": "String",
      "metadata": {
        "displayName": "Environment"
      },
      "defaultValue": "dev"
    },
    "Owner": {
      "type": "String",
      "metadata": {
        "displayName": "Owner"
      },
      "defaultValue": "admin"
    },
    "CostCenter": {
      "type": "String",
      "metadata": {
        "displayName": "CostCenter"
      },
      "defaultValue": "NA"
    }
  }
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "tags",
          "exists": "false"
        },
        {
          "field": "type",
          "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        }
      ]
    },
    "then": {
      "effect": "append",
      "details": [
        {
          "field": "tags",
          "value": {
            "Environment": "[parameters('Environment')]",
            "Owner": "[parameters('Owner')]",
            "CostCenter": "[parameters('CostCenter')]"
          }
        }
      ]
    }
  }
}

1 Ответ

2 голосов
/ 10 мая 2019

Пойми сам, условие "exists": "false" в моей политике будет срабатывать только в том случае, если свойство "tags" отсутствует или имеет значение null, поэтому группа ресурсов или ресурс с "tags": {} обойдут мою политику, даже если она не 'у меня нет никаких тегов.

Кроме того, простая проверка тегов нецелесообразна, следует проверять имя тега от одного к другому, если не соответствует, предпринять действия для добавления.

И я также нашел ниже утверждение isn 'Я не работаю с группами ресурсов, возможно, потому что это нерегулярные практики.

{
  "then": {
    "effect": "append",
    "details": [
      {
        "field": "tags",
        "value": {
          "Environment": "[parameters('Environment')]",
          "Owner": "[parameters('Owner')]",
          "CostCenter": "[parameters('CostCenter')]"
        }
      }
    ]
  }
}

предлагает вместо этого использовать оператор ниже

{
  "then": {
    "effect": "append",
    "details": [
      {
        "field": "tags['Environment']",
        "value": "[parameters('Environment')]"
      },
      {
        "field": "tags['Owner']",
        "value": "[parameters('Owner')]"
      },
      {
        "field": "tags['CostCenter']",
        "value": "[parameters('CostCenter')]"
      }
    ]
  }
}
...