Ссылки на переменные в объявлениях `copy` в шаблонах Azure ARM - PullRequest
0 голосов
/ 04 ноября 2019

Я создаю шаблон Azure ARM. Я использую объявление copy, чтобы избежать повторения моего кода;однако я обнаружил, что это часто приводит к самому повторению. Рассмотрим следующий пример из ARM Lab 6 :

  "variables": {
    "hubID": "[if(parameters('peer'), resourceId(parameters('hub').resourceGroup, 'Microsoft.Network/virtualNetworks/', parameters('hub').vnet.name), '')]",
    "spokeID": "[resourceId('Microsoft.Network/virtualNetworks/', parameters('spoke').vnet.name)]",
    "copy": [
        {
            "name": "subnets",
            "count": "[length(parameters('spoke').subnets)]",
            "input": {
              "name": "[parameters('spoke').subnets[copyIndex('subnets')].name]",
              "addressPrefix": "[parameters('spoke').subnets[copyIndex('subnets')].addressPrefix]",
              "id": "[concat(resourceId('Microsoft.Network/virtualNetworks/', parameters('spoke').vnet.name), '/subnets/', parameters('spoke').subnets[copyIndex('subnets')].name)]"
            }
        }
    ]
  }

Выражение parameters('spoke').subnets[copyIndex('subnets')] повторяется несколько раз. Есть ли способ присвоения результата этого copy -индексированного выражения переменной, на которую затем можно ссылаться в объявлении copy?

1 Ответ

1 голос
/ 04 ноября 2019

Я так не думаю, вы могли бы теоретически создать переменную со списком этих идентификаторов и использовать copyIndex() для доступа к этим переменным в нескольких других переменных копирования, но вам все равно придется объявить эту первую переменную в похожемfashion.

Технически вы можете написать функцию, которая будет принимать значение copyIndex() в качестве входных данных и извлекать этот конкретный экземпляр из массива parameters('spoke').subnets, но, учитывая, что вам нужна и функция name, и addressPrefix, такженужно принять, какой параметр возвращать (или он будет возвращать объект, и вам потребуется доступ к свойствам этого объекта). Я не уверен, что функция шаблона ARM может вернуть объект, я никогда не работал с функциями в шаблонах ARM, потому что они в значительной степени бесполезны.

...