Задайте значение appsetting условно в шаблоне ARM
У нас есть шаблон Azure ARM, который добавляет настройки приложений для сайта Microsoft.Web/.
"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
ценности.
- https://myservice-dev.domain.ca/
- https://myservice-qa.domain.ca/
- https://myservice-ci.domain.ca/
- https://myservice-prod.domain.ca/
Проблема в том, что мы хотим нарушить соглашение о 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')]"
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",
Для примера в вопросе ответ в итоге выглядел так:
"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')]"
}
]