Можно ли выполнить итеративную замену строки в шаблоне Azure ARM? - PullRequest
0 голосов
/ 04 апреля 2019

Я подозреваю, что невозможно выполнить то, что я ищу, но это стоит попробовать!

У меня есть конвейер для подготовки правил оповещения запросов журнала Azure.Отдельные правила оповещения определяются как файлы параметров ARM, и я использую общий файл шаблона ARM для их развертывания.

Вот урезанная версия файла моего шаблона с пропущенными большинством параметров.

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "logQuery": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Query to execute against the AI resource"
            }
        }
    },
    "variables": {
        "appInsightsResourceId": "[concat(resourceGroup().id,'/providers/','microsoft.insights/components/', parameters('appInsightsResourceName'))]",
        "actionGroupId": "[concat(resourceGroup().id,'/providers/','microsoft.insights/actionGroups/', parameters('actionGroupName'))]",
        "linkToAiResource" : "[concat('hidden-link:', variables('appInsightsResourceId'))]"
    },
    "resources":[{
        "name":"[parameters('alertName')]",
        "type":"Microsoft.Insights/scheduledQueryRules",
        "location": "northeurope",
        "apiVersion": "2018-04-16",
        "tags": {
            "[variables('linkToAiResource')]": "Resource"
        },
        "properties":{
           "description": "[parameters('alertDescription')]",
           "enabled": "[parameters('isEnabled')]",
           "source": {
               "query": "[parameters('logQuery')]",
               "dataSourceId": "[variables('appInsightsResourceId')]",
               "queryType":"[parameters('logQueryType')]"
           },
          "schedule":{
               "frequencyInMinutes": "[parameters('alertSchedule').Frequency]",
               "timeWindowInMinutes": "[parameters('alertSchedule').Time]"    
           },
           "action":{
                "odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.AlertingAction",
                "severity": "[parameters('alertSeverity')]",
                "aznsAction":{
                    "actionGroup":"[array(variables('actionGroupId'))]"
                },
                "trigger":{
                    "thresholdOperator":"[parameters('alertTrigger').Operator]",
                    "threshold":"[parameters('alertTrigger').Threshold]"
                }
            }
         }
       }
    ]
}

Вы можете видеть, как я предоставляю запрос App Insights в качестве параметра, поэтому мои параметрыФайл может выглядеть примерно так:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0", 
    "parameters": {
        "logQuery": {
            "value": "requests | where resultCode >= 500"
        }
    }
}

Однако эти запросы могут быть очень длинными и трудными для понимания при просмотре в виде неразрывной строки JSON.Поэтому я хочу параметризовать этот параметр (если вы знаете, что я имею в виду), чтобы ключевые переменные определялись и поставлялись отдельно.Я думал об изменении параметров на что-то вроде этого, ввод нового параметра, содержащего массив замен заполнителей для параметризованного запроса ...

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0", 
    "parameters": {
        "logQueryVariables": [
            { "{minCode}": "500" }
        ],
        "logQuery": {
            "value": "requests | where resultCode >= {minCode}"
        }
    }
}

... и затем поиск способа перебора переменныхмассив и заменить заполнители в параметре logQuery, я подумал, может быть, я мог бы использовать функцию ARM или что-то.Но я боюсь признать, что застрял с этой частью.Можно ли использовать синтаксис copy, чтобы сделать что-то подобное?

1 Ответ

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...