Получить массив имен свойств объекта в шаблоне ARM - PullRequest
0 голосов
/ 07 января 2020

В шаблоне ARM есть способ получить массив, содержащий JSON имен свойств объекта? Я не вижу ничего очевидного в документации . Самое близкое, что я вижу, это length(object), чтобы получить количество свойств объекта, но я не думаю, что я мог бы даже использовать копию l oop, чтобы получить имена свойств.

Определенный c сценарий I хочу реализовать развертывание web appsettings с дополнительными настройками слот-липучки в промежуточный слот:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "webSiteName": {
      "type": "string"
    },
    "globalAppSettings": {
      "type": "object"
    },
    "slotName": {
      "type": "string"
    },
    "slotAppSettings": {
      "type": "object"
    },
    "slotStickySettings": {
      "type": "array",
      // but getPropertyNames(object) is not a real function :(
      "defaultValue": "[getPropertyNames(parameters('slotAppSettings'))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Web/sites/config",
      "name": "[concat(parameters('webSiteName'), '/appsettings')]",
      "apiVersion": "2018-02-01",
      "properties": "[parameters('globalAppSettings')]"
    },
    {
      "type": "Microsoft.Web/sites/slots/config",
      "name": "[concat(parameters('webSiteName'), '/', parameters('slotName'), '/appsettings')]",
      "apiVersion": "2018-02-01",
      "properties": "[union(parameters('globalAppSettings'), parameters('slotAppSettings'))]"
    },
    {
      "type": "Microsoft.Web/sites/config",
      "name": "[concat(parameters('webSiteName'), '/slotconfignames')]",
      "apiVersion": "2015-08-01",
      "properties": {
        "appSettingNames": "[parameters('slotStickySettings')]"
      }
    }
  ]
}

1 Ответ

0 голосов
/ 09 января 2020

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

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "testSettings": {
            "type": "object",
            "defaultValue": {
                "a": "demo value 1",
                "b": "demo value 2"
            }
        }
    },
    "variables": {
        "delimiters": [","],
        "settingArray": "[split(replace(replace(replace(string(parameters('testSettings')), '{', ''), '}', ''), '\"', ''), variables('delimiters'))]",
        "propNameArray": {
            "copy": [
                {
                    "name": "copyPropertyNames",
                    "count": "[length(variables('settingArray'))]",
                    "input": "[substring(variables('settingArray')[copyIndex('copyPropertyNames')], 0, indexOf(variables('settingArray')[copyIndex('copyPropertyNames')], ':'))]"
                }
            ]
        }
    },
    "resources": [],
    "outputs": {
        "paramOutput": {
            "type": "array",
            "value": "[variables('propNameArray').copyPropertyNames]"
        }
    }
}
...