У меня возникают проблемы с настройкой шаблона ARM для веб-приложений Azure, поскольку я не могу добавить параметры ConnectionString, где они задают значения, если параметры заданы, но оставьте поле пустым (по умолчанию), если параметры не заданы.
Вот как это выглядит в файле template.json:
"connectionStrings": [
{
"name": "[parameters('connString').connName)]",
"connectionString": "[parameters('connString').string]",
"type": "[parameters('connString').connType]"
}
],
И в файле parameters.json:
"connString": {
"value": {
"connName": "",
"string": "",
"connType": ""
}
},
При запуске развертывания с указанным выше способом происходит сбой "Имя параметра не может быть пустым" Я попытался использовать функцию равенства, чтобы установить значение как пустое, если параметр пуст, но установить параметр, если параметр заполнен, однако ему не нравится пустое значение.
"name": "[if (equals(parameters('connString').connName,''),'',parameters('connString').connName)]"
Также попытался выполнить пустую функцию:
"name": "[not(empty(parameters('connString').connName))]"
Однако это возвращает "False", если пусто, и "True", если параметр установлен (как задумано).
Развертывание работает нормально, если я установил фиктивные значения в качестве параметров, можно ли установить функцию или что-то подобное, поэтому, если параметр пуст, он использует любое отправленное значение, как если бы раздел connectionStrings не присутствовал в шаблоне? Эти параметры не являются обязательными, но похоже, что они находятся в фактическом файле template.json и ожидают значения.
Ваше здоровье
РЕДАКТИРОВАТЬ Собираюсь опубликовать, как выглядели мои конечные шаблоны, на случай, если кому-то понадобится помощь.
Файл шаблона
Переменные
"variables": {
"empty": []
},
Ресурсы
"connectionStrings": "[if (empty(parameters('connString')), variables('empty'), array(parameters('connString')))]",
Файл параметров
При установке строки подключения
"connString": {
"value": [{
"name": "test",
"connectionString": "ufgndjkngsdgjkn",
"type": "Custom"
}]
},
Если вы не хотите устанавливать строку подключения
"connString": {
"value": [
]
},


вы должны просто сделать это:
параметры:
"connString": {
"value": {}
},
переменные:
"empty": [],
шаблон:
"connectionStrings": "[if (empty(parameters('connString')), variables('empty'), array(parameters('connString')))]"
Идеально! Большое спасибо за это, отлично сработало. Обратите внимание, что мне нужно было удалить массив connectionString в файле шаблона и просто вставить предложенную строку кода. Мне также нужно было изменить файл параметров, чтобы строка подключения ожидала массив вместо объекта. Еще раз спасибо
вы можете попробовать:
параметры:
"connString": [{
"value": {
"name": null,
"connectionString": null,
"type": "Custom"
}
}],
переменные:
шаблон:
"connectionStrings": "[if (empty(parameters('connString')[0].value.name), json('null'), parameters('connString'))]"
после дополнительного тестирования: также обнаружено несколько сценариев, в которых шаблон не принимает значение NULL as и значение ресурса массива. замена json ('null') на json ('[]') выше, похоже, работает в большем количестве случаев.
стоит попробовать использовать "условие" в шаблоне ARM?