azure - Azure ARM 模板:表达式作为非字符串或具有允许值的参数的默认值
问题描述
我正在定义一些参数来在我的 ARM 模板中配置我的 SQL 数据库弹性池。我想为每个参数指定默认值,第二个和第三个参数的默认值基于第一个参数的值。但是,每当我尝试将表达式指定为具有允许值集的参数的默认值时,我都会遇到错误:“此值不是参数'...'的允许值之一。” 对于具有非字符串类型的参数也会发生同样的情况:“参数'...'必须是'...'类型。”。
我可以通过消除允许的值并将所有参数类型更改为字符串来解决此问题。但是,这将失去对用户输入值的验证。定义默认值时我做错了什么,还是这是 ARM 限制?
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"sqlSkuName": {
"type": "string",
"allowedValues": [
"BasicPool",
"StandardPool",
"PremiumPool"
],
"defaultValue": "StandardPool"
},
"sqlSkuTier": {
"type": "string",
"allowedValues": [
"Basic",
"Standard",
"Premium"
],
"defaultValue": "[if(equals(parameters('sqlSkuName'), 'BasicPool'), 'Basic',
if(equals(parameters('sqlSkuName'), 'StandardPool'), 'Standard',
if(equals(parameters('sqlSkuName'), 'PremiumPool'), 'Premium',
'')))]"
},
"sqlDatabaseMaxCapacity": {
"type": "int",
"defaultValue": "[if(equals(parameters('sqlSkuName'), 'BasicPool'), 5, 50)]"
},
}
}
解决方案
您必须使用对象变量有条件地使用参数,因此您必须执行以下操作:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"sqlSkuName": {
"type": "string",
"allowedValues": [
"BasicPool",
"StandardPool",
"PremiumPool"
],
"defaultValue": "StandardPool"
},
"sqlSkuTier": {
"type": "string",
"allowedValues": [
"Basic",
"Standard",
"Premium"
]
},
"sqlDatabaseMaxCapacity": {
"type": "int",
"defaultValue": 0
}
},
"variables": {
"sqlSkuTier-Var": "[if(equals(parameters('sqlSkuName'), 'BasicPool'), 'Basic',
if(equals(parameters('sqlSkuName'), 'StandardPool'), 'Standard',
if(equals(parameters('sqlSkuName'), 'PremiumPool'), 'Premium',
'')))]",
"sqlDatabaseMaxCapacity-var": "[if(equals(parameters('sqlDatabaseMaxCapacity'),0 ),
if(equals(parameters('sqlSkuName'), 'BasicPool'), 5,50),
parameters('sqlDatabaseMaxCapacity'))]"
},
"resources": []
}
然后使用该值:
variables('sqlSkuTier-Var')
我建议您使用 Visual Studio 代码插件 ( https://marketplace.visualstudio.com/items?itemName=msazurermtools.azurerm-vscode-tools ) 来拥有 IntelliSense,它对工作和查看您的错误有很大帮助。
推荐阅读
- javascript - Charts.js - 值间隔的条形图不同颜色不起作用
- javascript - Onclick 侦听器和单击触发器不起作用
- ssis - SSIS 包在 SIT 环境中失败
- php - 无法使用 postgres 和 docker 创建数据库
- php - Laravel 迁移错误:找不到基表或视图
- python - 如何使用按钮浏览下一个和上一个列表项?
- java - 给定数组表示 S 所需的最小数字计数
- python - Filter grouped pandas dataframe, keep all rows with minimum value in column
- javascript - 赛普拉斯:对意外访问/请求错误进行故障排除
- python - ValueError:形状 (None, 1) 和 (None, 101) 不兼容