Azure ARM模板中是否有任何方法可以使用类似于Case的语句?
Azure中是否有任何方法可以根据参数或变量的值使用类似于大小写的语句 例如:Azure ARM模板中是否有任何方法可以使用类似于Case的语句?,azure,azure-resource-manager,arm-template,Azure,Azure Resource Manager,Arm Template,Azure中是否有任何方法可以根据参数或变量的值使用类似于大小写的语句 例如: if vmName = "DB" then adminloginName = "DBAdmin" if vmName = "RDP" then adminlogonNAme = "RDPAdmin" 正如@juvchan指出的那样。虽然支持一些逻辑检查,但不支持CASE语句。 但是,为了解决您描述的问题,您可以将变量与参
if vmName = "DB" then adminloginName = "DBAdmin"
if vmName = "RDP" then adminlogonNAme = "RDPAdmin"
正如@juvchan指出的那样。虽然支持一些逻辑检查,但不支持CASE语句。 但是,为了解决您描述的问题,您可以将变量与参数结合使用来构造管理员名称。例如
"parameters": {
"vm_name": {
"defaultValue": "DB",
"type": "string"
},
"variables": {
"admin_name": "[concat(parameters('vm_name'), 'Admin')]"
}
然后您可以在资源定义中使用admin\u name
变量
"resources":[
{
...other resource properties
"adminloginName": "[variables('admin_name')]"
}
]
还有一些字符串操作函数(),包括一个
子字符串函数,这样,如果您的VM名称以DB或RDP开头或结尾,那么您可以只使用所需名称的一部分。否,ARM模板功能截至今天尚不支持类似大小写的语句
但是,它们已经支持逻辑if
功能
逻辑功能
资源管理器为使用提供了以下功能
逻辑条件:
- 及
- 布尔
- 如果
- 不是
- 或
参考资料:您可以通过以下方法模拟:
"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'))]””
很抱歉,到目前为止,还没有这样的方法,但是,您可以应用一些解决方法/技巧:
备选案文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') )]",
}
还有许多其他的组合你能@4c74356b41解释一下,当引用官方文件时,有什么是不正确的吗?因为看看我的案例陈述,你的例子根本不能概括。如果例如Case如果vmName=“DB”然后adminloginName=“xxx”如果vmName=“RDP”然后adminlogonNAme=“yyy”,那么您的示例也会破坏您的Case语句的有效名称,您也可以通过为参数创建允许的值来解决这个问题。我在回答中甚至没有尝试使用任何类似Case的语句。我要说的是,它不支持今天。它只是表明你是为了不赞成而不赞成别人,而不是用一些有效和令人信服的论点来帮助纠正。@4c74356b41-怎么会这样?如果我不准确,我想纠正。