Условно установите значение параметра приложения в шаблоне ARM.

У нас есть шаблон Azure ARM, который добавляет настройки приложения для сайта Microsoft.Web/site.

"resources": [
    {
        "apiVersion": "2016-03-01",
        "name": "myazurefunction", 
        "type": "Microsoft.Web/sites", 
        "properties": {
            "name": "myazurefunction", 
            "siteConfig": {
                "appSettings": [
{
    "name": "MY_SERVICE_URL", 
    "value": "[concat('https://myservice-', parameters('env'), '.domain.ca')]"
}
                ]    
            }
        }
    }
]

У нас также есть четыре файла 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"
        }
    }
}

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

Проблема в том, что мы хотим нарушить соглашение для среды dev. То есть мы хотим, чтобы MY_SERVICE_URL выглядело примерно так:

Как мы можем настроить шаблон ARM, чтобы нарушить соглашение только для одной среды?

Хотя я сначала использую такое условное выражение, но такая функция ARM, похоже, недоступна.

"name": "MY_SERVICE_URL", 
"value": "[parameters('env') -eq 'dev' 
    ? 'https://abc123.foo.bar.baz.ca' 
    :  concat('https://myservice-', parameters('env'), '.domain.ca')]"

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


Ответы (2)


просто создайте переменную, которая будет зависеть от параметра:

"parameters": {
...
"DeploymentType": {
    "type": "string",
    "allowedValues": [
        "Dev",
        "Prod"
    ]
}
...
"variables": {
    "Dev": "https://some_service-ci.domain.com",
    "Prod": "https://abc123.foo.bar.baz.com",
    "DeploymentVariable": "[variables(parameters('DeploymentType'))]",
...
"appSettings": [
    "name": "MY_SERVICE_URL", 
    "value": "[variables('DeploymentVariable')]"
]
...

Итак, как это работает. вы передаете параметр «DeploymentType», это может быть PROD или DEV. Если вы передаете DEV "DeploymentVariable": "[variables(parameters('DeploymentType'))]",, это оценивается как "[variables('Dev')]" и получает значение "Dev": "https://some_service-ci.domain.com",.

person 4c74356b41    schedule 08.03.2017
comment
извините, исправил опечатку и добавил комментарий @ShaunLuttin - person 4c74356b41; 08.03.2017

Для примера в вопросе ответ выглядел так:

"variables": {
   "myServiceUrl_default": "[concat('https://myservice-', parameters('env'), '.domain.ca')]",
   "myServiceUrl_dev": "https://abc123.foo.bar.baz.ca",
   "myServiceUrl_ci": "[variables('myServiceUrl_default')]",
   "myServiceUrl_qa": "[variables('myServiceUrl_default')]",
   "myServiceUrl_prod": "[variables('myServiceUrl_default')]",
   "myServiceUrl": "[variables(concat('myServiceUrl_', 'parameters('env')'))]"  
},

...

"appSettings: [
   {
      "name": "MY_SERVICE_URL",
      "value": "[variables('myServiceUrl')]"
   }
]
person Shaun Luttin    schedule 08.03.2017