Test-AzureRmResourceGroupDeployment не проверяет вложенный ресурс

Я хочу включить Test-AzureRmResourceGroupDeployment в конвейер сборки, поэтому перед развертыванием я знаю, что у шаблона / параметров есть серьезные проблемы.

Однако я обнаружил, что, если бы я использовал вложенное развертывание, оно не предоставляет никакой проверки вложенному развертыванию, у меня может быть плохой templateLink -> uri с неверными переменными даже в URI, и он все еще проверяется как успешный.

Я попробовал с локальным шаблоном, шаблоном URI, с / без хэшированных параметров и файла параметров на всякий случай.

Я предполагаю, что под PowerShell AzureRM используется API Resource Manager, он не указывает на то, что проверка на самом деле делает со вложенными шаблонами: https://docs.microsoft.com/en-us/rest/api/resources/deployments/validate

Что-нибудь, что я пропустил? Любые предложения о том, как проверить весь шаблон, нужно ли мне анализировать вложенные шаблоны и что-то, как пересоздать параметры из json и выполнить развертывание вручную (что было бы обидно)?

2 ответа

Читая сообщение на форуме от сотрудника Microsoft в команде Resource Manager (частный форум, к сожалению, не может предоставить ссылку), оказывается, что Test-AzureRmResourceGroupDeployment выполняет "расширение шаблона", на что 4c74356b41 также любезно указал - конечно, проверка вложенного шаблона должна Работа...

Таким образом, дальнейшие эксперименты привели к нахождению ограничения в валидации, см. Пример ниже. Если во вложенном развертывании отсутствует переменная, то она не воспринимается как предупреждение проверки в родительском шаблоне, а также, как представляется, мешает расширению шаблона, что также приводит к игнорированию вложенного шаблона.

Если "parameters": { "missing" : "[variables('PURPOSEFULLY_MISSING')]" } удаляется, затем шаблон проверяется как обычно, и вложенный шаблон также.

Фрагмент общего шаблона только для вложенных ресурсов:

  "resources": [
    {
      "name": "[variables('deploymentName')]",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[variables('deploymentUri')]",
          "contentVersion": "1.0.0.0"
        },
        "parameters": { "missing" :  "[variables('PURPOSEFULLY_MISSING')]"  }
      }
    }
  ],

Это не так, оно будет проверять вложенное развертывание, даже если вы используете его condition: falseТаким образом, вы делаете что-то не так, нам нужно посмотреть на шаблон и как вы вызываете командлет, чтобы понять, что происходит

Что касается проверки: реального способа проверки работ по развертыванию не существует (test-azurermresourcegroupdeployment - просто мусор, крайне низкое значение). единственный способ проверить это - развернуть его.

Другие вопросы по тегам