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 - просто мусор, крайне низкое значение). единственный способ проверить это - развернуть его.