Оценка составных имен переменных в шаблоне Azure Resource Manager (ARM)

Я создаю шаблон для развертывания связанного шаблона n количество раз, используя функцию copy, увеличивая используемую объектную переменную (например, с vmRole1 до vmRole2), но кажется, что пока я могу чтобы объединить правильную строку переменной (например, variables('vmRole1').roleInstanceCount), она никогда не оценивается до того, как будет передана связанному шаблону.

Есть ли способ заставить шаблон ARM фактически оценить объединенную строку внутри цикла перед отправкой ее в связанный шаблон?

Образец переменной:

"vmRole1": {
  ...
  "roleInstanceCount": 2,
  ...
}

Пример ресурса:

{
  "apiVersion": "2015-01-01",
  "type": "Microsoft.Resources/deployments",
  "name": "[concat('DeployRole',copyIndex(1) ,variables('vmRole1Name'))]",
  "copy": {
    "name": "rolecopy",
    "count": 2
  },
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "<proper URL here>",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
      ...
      "roleInstanceCount": { "value": "[concat('variables(', variables('singleQuote'), 'vmRole', copyIndex(1), variables('singlequote'), ').roleInstanceCount')]" },
      ...

person jak119    schedule 12.07.2017    source источник


Ответы (1)


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

Попробуйте сделать это так (используя свой маршрут):

"value": "[variables(concat('vmRole', copyIndex())).roleInstanceCount]

Но, честно говоря, я бы преобразовал эту ерунду vmRole1\vmRole2...\vmRole100 в массив и ссылался на объекты следующим образом:

"value": "[variables('vmReferenceArray')[copyIndex()].propertyX]"

и ваша переменная будет выглядеть так:

"vmReferenceArray": [
    {
        propertyX: ...
        propertyY: ...
        ...
    },
    {
        ...
    },
    ...
    {
        ...
    }
]
person 4c74356b41    schedule 12.07.2017
comment
Я провел слишком много часов, глядя на это. Ваше первое предложение ( "value": "[variables(concat('vmRole', copyIndex())).roleInstanceCount] ) отлично сработало. Я думал о массиве, может быть, я вернусь и поменяю его. - person jak119; 13.07.2017