在Azure中,是否可以根据参数或变量的值使用类似语句的语句?
例如Case 如果vmName =“DB”则adminloginName =“DBAdmin” 如果vmName =“RDP”则adminlogonNAme =“RDPAdmin”
答案 0 :(得分:0)
正如@juvchan指出的那样。虽然支持某些逻辑检查,但不支持CASE语句。 但是,要解决您所描述的问题,可以将变量与参数结合使用来构造管理员名称。例如......
"parameters": {
"vm_name": {
"defaultValue": "DB",
"type": "string"
},
"variables": {
"admin_name": "[concat(parameters('vm_name'), 'Admin')]"
}
然后,您可以在资源定义中使用admin_name
变量。
"resources":[
{
...other resource properties
"adminloginName": "[variables('admin_name')]"
}
]
还有一些字符串操作函数(Azure ARM string functions),包括substring
函数,这样如果您的VM名称以 DB 或 RDP ,那么你可以只使用你需要的名称部分。
答案 1 :(得分:0)
否,ARM模板功能截至今日 NOT YET支持案例类似语句。
但是,它们确实支持逻辑if
功能。
逻辑功能
资源管理器提供以下用于使用的功能 逻辑条件:
- 和
- bool
- if
- 不
- 或
参考:Azure Resource Manager template functions - Logical Functions
答案 2 :(得分:0)
您可以通过以下方式模仿:
"variables": {
"vmName": "DB" # this supposed to be parameter, but for brievity i'll use variable
"adminloginNameDB": "DBADMIN"
"adminloginNameRDP": "RDPADMIN"
"adminlogin": "[variables(concat('adminloginName', variables('vmName')))]"
}
所以实际上你会像这样使用它:"[variables(concat('adminloginName', parameters('vmName')))]"
答案 3 :(得分:0)
对不起,但是到目前为止,尚无法实现这种方法,但是,您可以应用一些解决方法/黑客:
选项1:
"variables": {
"adminloginName": "[if(equals(parameters('vmName'),'DB'),'DBAdmin', 'RDPAdmin' )]"
}
选项2:
"variables": {
"adminloginNames":["DBAdmin","RDPAdmin"],
"adminloginName": "[if(equals(parameters('vmName'),'DB'),first(variables('adminloginNames'),last(variables('adminloginNames') )]",
}
还有许多其他组合