Политика AllowedValues ​​для свойства SamplingPercentage ресурса ApplicationInsights - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь создать политику Azure, которая будет проверять ресурсы ApplicationInsights в нашем клиенте Azure, значение SamplingPercentage которого больше параметризованного значения. На данный момент для параметра задан тип «Float» (поскольку вы можете указать 33.3, 12.5, 8.3):

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [{
        "value": "type",
        "equals": "Microsoft.Insights/components"
      },
      {
        "value": "SamplingPercentage",
        "greater": "[parameters('Maximum')]"
      }]      
    },
    "then": {
      "effect": "audit"
    }
  },
  "parameters": {
    "Maximum": {
      "type": "Float",
      "metadata": {
        "displayName": "Maximum",
        "description": "Sets the maximum allowed sampling percentage."
      }
    }
  }
}

При настройке SamplingPercentage через портал Azure Тем не менее, вам представлен список допустимых опций. Я хотел бы включить их в свойство AllowedValues параметра Maximum.

Первой идеей было использование strongType (который, как я предполагаю, побудит портал Azure вводить допустимые значения на основе по типу) ... Я не смог найти такое значение. Вторая попытка окончилась неудачей, так как не представляется возможным создать Array целых чисел. Третья попытка не удалась, когда я затем изменил Type параметра *1013* на String и объявил параметр следующим образом:

"parameters": {
   "Maximum": {
     "type": "Array",
     "metadata": {
       "displayName": "Maximum",
       "description": "Sets the maximum allowed sampling percentage."
     },
     "allowedValues": [ "100", "50", "33.3", "25", "12.5", "8.3", "4", "2", "1" ]
   }
 }

и соответствующее условие

{
   "value": "SamplingPercentage",
   "greater": "[float(parameters('Maximum'))]"
}

Это приводит к этой ошибке:

Внутреннее исключение 'Функция языка шаблонов' float 'была вызвана с недопустимым параметром. Значение нельзя преобразовать в целевой тип. '

Что я делаю не так?

1 Ответ

1 голос
/ 05 мая 2020

Следующее правило политики будет проверять ресурсы ApplicationInsights, у которых SamplingPercentage больше параметризованного значения:

"policyRule": {
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Insights/components"
      },
      {
        "value": "[float(field('Microsoft.Insights/components/SamplingPercentage'))]",
        "greater": "[float(parameters('Maximum'))]"
      }
    ]
  },
  "then": {
    "effect": "audit"
  }
},
"parameters": {
  "Maximum": {
    "type": "String",
    "metadata": {
      "displayName": "Maximum",
      "description": "Sets the maximum allowed sampling percentage."
    },
    "allowedValues": [
      "100",
      "50",
      "33.3",
      "25",
      "12.5",
      "8.3",
      "4",
      "2",
      "1"
    ]
  }
}

Вот что пошло не так с вашей политикой:

  1. тип параметра Максимум должен быть Строка , а не Массив
    • allowValues ​​всегда является массивом. Типом параметра является тип, которому будет присвоен
  2. Свойства (например, SamplingType ) не могут быть доступны напрямую. Вы должны использовать псевдонимы ( Microsoft.Insights / components / SamplingPercentage ).
  3. В условии , "value" будет оценивать литеральные значения. Используйте "field" (или функцию field('alias')) для оценки свойств в полезной нагрузке запроса.
...