在ARM模板中是否可以使用类似Case的语句?

时间:2018-02-08 12:21:37

标签: azure azure-resource-manager arm-template

在Azure中,是否可以根据参数或变量的值使用类似语句的语句?

例如Case 如果vmName =“DB”则adminloginName =“DBAdmin” 如果vmName =“RDP”则adminlogonNAme =“RDPAdmin”

4 个答案:

答案 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')  )]",
}

还有许多其他组合