在Azure ARM模板中使用空/可选参数

时间:2018-10-19 00:47:48

标签: azure azure-web-sites arm-template azure-automation

我在为Azure Web Apps设置ARM模板时遇到问题,因为如果设置了参数,我无法在其中设置值的地方添加ConnectionString参数,但是如果未设置参数,则留空(默认)

这是它在template.json文件中的外观:

"connectionStrings": [
        {
          "name": "[parameters('connString').connName)]",
          "connectionString": "[parameters('connString').string]",
          "type": "[parameters('connString').connType]"
        }
      ],

在parameters.json文件中:

"connString": {
        "value": {
            "connName": "",
            "string": "",
            "connType": ""
        }
    },

使用上述命令运行部署时,失败,提示“参数名称不能为空” 我尝试使用equals函数将参数设置为空(如果参数为空),但如果参数已填写则设置参数,但是它不喜欢空值。

"name": "[if(equals(parameters('connString').connName,''),'',parameters('connString').connName)]"

还尝试了一个空函数:

 "name": "[not(empty(parameters('connString').connName))]"

但是,如果为空,则返回“ False”,如果设置了参数(按设计),则返回“ True”

如果我将伪值设置为参数,则部署工作正常,是否可以设置函数或类似内容,因此,如果参数为空,它将使用发送的任何值,就像模板中不存在connectionStrings部分一样?这些参数是可选的,但看起来像是因为它们位于实际的template.json文件中,期望值。

欢呼

EDIT 将发布我的最终模板的外观,以防其他人需要帮助。

模板文件

变量

"variables": {
"empty": []
},

资源

"connectionStrings": "[if(empty(parameters('connString')), variables('empty'), array(parameters('connString')))]",

参数文件

如果设置连接字符串

 "connString": {
        "value": [{
            "name": "test",
            "connectionString": "ufgndjkngsdgjkn",
            "type": "Custom"
        }]
    },

如果不想设置连接字符串

"connString": {
    "value": [
    ]
},

2 个答案:

答案 0 :(得分:1)

您应该这样做:

参数:

"connString": {
    "value": {}
},

变量:

"empty": [],

模板:

"connectionStrings": "[if(empty(parameters('connString')), variables('empty'), array(parameters('connString')))]"

答案 1 :(得分:0)

您可以尝试:

参数:

“ connString”:[{         “值”:{             “名称”:null,             “ connectionString”:null,             “类型”:“自定义”         }     }]

变量:

模板:

"connectionStrings": "[if(empty(parameters('connString')[0].value.name), json('null'), parameters('connString'))]"