在ARM模板中有条件地设置appsetting值

问题描述:

我们有一个Azure ARM模板,它为Microsoft.Web /站点添加appsettings。在ARM模板中有条件地设置appsetting值

"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')]" 

刚刚创建,将取决于参数变量:

"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",

+1

对不起,固定一个错字,并添加评论@ ShaunLuttin – 4c74356b41

值对于这个问题的例子,答案最终看上去像这样:

"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')]" 
    } 
]