繁体   English   中英

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

[英]Set an appsetting value conditionally in an ARM template

我们有一个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值。

问题是我们想打破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",的值"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')]"
   }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM