代码之家  ›  专栏  ›  技术社区  ›  raptor85

如何在Azure ARM模板中选择VM T恤尺寸

  •  0
  • raptor85  · 技术社区  · 6 年前

    我有一个VM Deloyment模板,在该模板中,我将VM大小定义为T恤大小,例如small=Standard_DS2_V2、medium=Standard_E4s_V3和large=Standard_E4s_V3。

    我将它们定义为一个数组,如下变量部分所示

     "parameters": {
            "vmSpecs": {
                "type": "array"
            }
    },
    
    "variables": {
            "vmSizeType" :[{
                "small" : "Standard_DS2_v2",
                "medium": "Standard_E4s_v3",
                "large" : "Standard_E32s_v3"
            }]
    },
    
    "resources": [
    {
                "name": "[parameters('vmSpecs')[copyIndex()].vmName]",
                "type": "Microsoft.Compute/virtualMachines",
                "location": "[resourceGroup().location]",
                "apiVersion": "2018-06-01",
                "dependsOn": [
                    "VMNIC0Copy",
                    "[variables('storageAccountName')]"
                ],
                "copy": {
                    "name": "VMCopy",
                    "count": "[length(parameters('vmSpecs'))]"
                },
    
                "properties": {
                    "licenseType": "[parameters('vmSpecs')[copyIndex()].licenseType]",
                    "hardwareProfile": {
                        "vmSize": "[parameters('vmSpecs')variables('vmSizeType')[copyIndex()].vmSize[1]]"
                    }
    }
    

    在参数文件中

    "vmSpecs": {
                "value": [
                    { //vm01
                        "vmName": "test",
                        "dnsDomain": "domain.com",
                        "vmSize": "medium"
                     }
               }
    

    我的问题是如何输入vmsize,它根据定义的内容选择大小

    1 回复  |  直到 6 年前
        1
  •  1
  •   4c74356b41    6 年前

    像您通常(使用点表示法)访问几乎任何语言的对象属性一样:

    "vmSizeType" :{ << should be an object, you only make it harder making it an array
        "small" : "Standard_DS2_v2",
        "medium": "Standard_E4s_v3",
        "large" : "Standard_E32s_v3"
    }
    ...
    "vmSize": "[variables('vmSizeType')[parameters('vmSpecs')[copyIndex()].vmSize]]"
                ^^ tshirt variable     ^ ^^ input parameter   ^^ iteration ^^ property
                                       ^ get property defined dynamically, have to use [] syntax instead of dot notation
                                         for static\hardcoded property name you can use dot notation:
                                         variables('vmSizeType').small
    

    如果您需要将tshirt变量设置为数组(没有任何原因),那么也必须考虑到这一点。