繁体   English   中英

在 ARM 模板中有没有办法使用 Case-like 语句?

[英]Is there any way in ARM Templates to use a Case-like statement?

Azure 中是否有任何方法可以根据参数或变量的值使用类似CASE的语句?

例如:

    if vmName = "DB" then adminloginName = "DBAdmin"
    if vmName = "RDP" then adminlogonNAme = "RDPAdmin"

,截至今天,ARM 模板功能尚不支持Case 之类的语句。

但是,它们确实已经支持逻辑if函数。

逻辑功能

资源管理器提供以下用于处理逻辑条件的功能:

  • 布尔值
  • 如果

参考: Azure 资源管理器模板函数 - 逻辑函数

正如@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 字符串函数),包括一个substring函数,这样如果您的 VM 名称以DBRDP开头或结尾,则可以仅使用所需名称的一部分。

你可以用这个来模拟:

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

还有其他很多组合

您可以像这样使用嵌套的 if 语句来模拟 case 语句。

"variables": {
    "subscription_id": "[if(equals(parameters('env'),'dev'), parameters('devsubscriptionid'), if(equals(parameters('env'),'uat'), parameters('uatsubscriptionid'), parameters('prodsubscriptionid')))]",
    "routeTables_rt_gdp_apim_dev_ne_001_externalid": "[concat('/subscriptions/', variables('subscription_id'),'/resourceGroups/RG-COM-FIREWALL-DEV-NE-001-test/providers/Microsoft.Network/routeTables/rt-gdp-apim-dev-ne-001')]"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM