Условное добавление настройки приложения в шаблон ARM

Этот вопрос требует, чтобы и ключ, и значение настройки приложения были условными. Условно установить значение appsetting в шаблоне ARM связанный вопрос, требующий только условного значения.

У нас есть четыре файла parameters.environment.json. Например, это содержимое parameters.dev.json.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01...",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "env": {
            "value": "dev"
        }
    }
}

Требуется добавить параметр API_KEY только в среде dev и не иметь такого ключа или значения в средах ci, qa и prod. Что-то подобное приходит на ум, но, конечно, не работает в шаблоне ARM.

"appSettings": [
    {
        [if(parameters('env') eq 'dev')]
        {
            "name": "API_KEY", 
            "value": "[parameters('apikey')]"
        }    
        [endif()]
    }
]    

person Shaun Luttin    schedule 08.03.2017    source источник


Ответы (1)


Итак, тот же подход, но передача объектов;) Если вам нужно, вы можете создать другой уровень косвенности (если вам нужно больше условий).

"variables": {
"Appsettings1": {
    "name": "API_KEY1", 
    "value": "[parameters('apikey1')]",
    "existingsetting": "bla-bla"
},
"Appsettings2": {
    "name": "API_KEY2", 
    "value": "[parameters('apikey2')]",
    "existingsetting": "bla-bla"
},
"realAppsettings": "[variables(parameters('realAppsettings'))]" # < this pulls 
                  # Appsettings1 or Appsettings2 depending on the value or parameter
...
"appSettings": "[variables('realAppsettings')]"

Ссылка: Условно установите значение appsetting в шаблоне ARM

person 4c74356b41    schedule 08.03.2017
comment
Как переменная настройка приложения будет взаимодействовать с существующими настройками приложения, которые уже перечислены в разделе appsettings? Например. если мы начнем с "appSettings": "[ { "EXISTING_SETTING": "some_value" } ]", то как мы добавим переменную? - person Shaun Luttin; 08.03.2017
comment
Я не думаю, что вы можете их комбинировать, вам нужно будет включить существующую настройку в каждую переменную appsettings, я обновлю ответ @ShaunLuttin - person 4c74356b41; 08.03.2017
comment
Это то, чего я боялся... это может привести к значительному раздуванию переменных, потому что нам нужно будет дублировать туда все остальные настройки нашего приложения. т.е. В своем ответе вы повторили только одну существующую настройку. Если у нас есть, скажем, 50 других общих настроек, нам нужно будет повторить их все. - person Shaun Luttin; 08.03.2017
comment
ну, я думаю, у меня может быть обходной путь для вас, но это зависит от вас. - person 4c74356b41; 08.03.2017
comment
Конечно. Ответ, который я дал на предыдущий вопрос, показывает раздувание, которое начинает происходить из-за всего этого копирования общих значений. stackoverflow.com/a/42679274/1108891 - person Shaun Luttin; 08.03.2017
comment
просто у вас не сложится неправильное впечатление, я не собираюсь редактировать этот ответ, чтобы включить его, потому что это совершенно другой вопрос :) кроме того, он довольно большой :) @ShaunLuttin - person 4c74356b41; 08.03.2017