Как использовать функцию ссылочного ресурса внутри оператора if - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь отправить приватный ips с использованием ссылки (concat (variable ('nicName'), 0)). IpConfigurations [0] .properties.privateIPAddress для расширения на основе обычного, основанного на количестве созданных vms, если число vm равно 3.тогда 3 частных ips должны перейти к обычному расширению, и если число vm равно 5., то 5 частных ips должны перейти к обычному расширению. Я определил два расширения, но он ищет зависимости.

  "resources": [
    {
      "condition": "[equals(variables('numberOfVM'), 3)]",
      "name": "config-app-3",
      "type": "extensions",
      "location": "[parameters('location')]",
      "apiVersion": "2015-06-15",
      "dependsOn": [
          "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 0))]",
          "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 1))]",
          "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 2))]"
       ],
      "tags": {
        "displayName": "config-app"
      },
      "properties": {
        "publisher": "Microsoft.Azure.Extensions",
        "type": "CustomScript",
        "typeHandlerVersion": "2.0",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
          "commandToExecute": "[concat('sh /home/centos/install_apache.sh \',' ','--ip-address \' ,reference(concat(variables('nicName'), 0)).ipConfigurations[0].properties.privateIPAddress,' ', reference(concat(variables('nicName'), 1)).ipConfigurations[0].properties.privateIPAddress,' ', reference(concat(variables('nicName'), 2)).ipConfigurations[0].properties.privateIPAddress)]"
        }
      }
    },
    {
      "condition": "[equals(variables('numberOfVM'), 5)]",
      "name": "config-app-5",
      "type": "extensions",
      "location": "[parameters('location')]",
      "apiVersion": "2015-06-15",
      "dependsOn": [
         "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 0))]",
         "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 1))]",
         "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 2))]",
         "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 3))]",
         "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmName'), 4))]",
       ],
      "tags": {
        "displayName": "config-app"
      },
      "properties": {
        "publisher": "Microsoft.Azure.Extensions",
        "type": "CustomScript",
        "typeHandlerVersion": "2.0",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
          "commandToExecute": "[concat('sh /home/centos/install_apache.sh \',' ','--ip-address \' , reference(concat(variables('nicName'), 0)).ipConfigurations[0].properties.privateIPAddress,' ', reference(concat(variables('nicName'), 1)).ipConfigurations[0].properties.privateIPAddress,' ', reference(concat(variables('nicName'), 2)).ipConfigurations[0].properties.privateIPAddress,' ', reference(concat(variables('nicName'), 3)).ipConfigurations[0].properties.privateIPAddress,' ', reference(concat(variables('nicName'), 4)).ipConfigurations[0].properties.privateIPAddress)]"
        }
      }
    }
  ]

Я получаю ошибку ниже при развертывании шаблона.'Ссылка на шаблон' vm-nic-3 'недопустима: не удалось найти ресурс шаблона или копию ресурса с этим именем.Пожалуйста, смотрите https://aka.ms/arm-template-expressions/#reference для подробностей использования. '.так что я пытаюсь определить одно обычное расширение, которое будет обрабатывать оба условия.

1 Ответ

0 голосов
/ 06 февраля 2019

вы можете использовать if() функцию для ворота их:

if(equals(variables('numberOfVM'), 5), reference(concat(variables('nicName'), 3)).ipConfigurations[0].properties.privateIPAddress, '')

и вам нужно повторить это для всех вхождений опорной функции

...