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

Azure ARM模板部署:添加其他数据磁盘现有的未连接

  •  2
  • woter324  · 技术社区  · 7 年前

    看起来我遇到了ARM模板的局限性,希望有人能提出解决方案。

    我的deployVM。json模板使用复制函数来创建托管数据盘,它可以正常工作,但是,我需要附加一个不遵循复制模式的附加数据盘。

      "copy": [
                {
                  "name": "dataDisks",
                  "count": "[length(parameters('sharedVariables').disks.config)]",
                  "input": {
                    "name": "[concat(variables('vmName'),'-',parameters('sharedVariables').disks.config[CopyIndex('dataDisks')].name)]",
                    "diskSizeGB": "[parameters('sharedVariables').disks.config[CopyIndex('dataDisks')].diskSizeGB]",
                    "lun": "[parameters('sharedVariables').disks.config[copyIndex('dataDisks')].lun]",
                    "createOption": "Empty",
                    "managedDisk": {
                      "storageAccountType": "[parameters('sharedVariables').disks.accountType]"
                    }
                  }
                }
              ]
    
    • datadisks[] 属性是不允许的,

    • 创建整个VM资源的第二个实例也不是 允许,

    因此,我创建了一个子模板来绕过上述限制。子模板创建数据盘并将其连接到vm, 但是

    "resources" : [
        //Create a managed disk using an existing VHD
        {
          "apiVersion": "2017-03-30",
          "type": "Microsoft.Compute/disks",
          "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
          "location": "[resourceGroup().location]",
          "tags": {
            "Purpose": "Managed disk containing VHD of installation media",
            "createdBy": "[parameters('sharedVariables').createdBy]"
          },
          "sku": {
            "name": "[parameters('sharedVariables').media.storageAccountType]"
          },
          "properties": {
            "creationData": {
              "createOption": "Import",
              "sourceUri": "[parameters('sharedVariables').media.sourceVhdUri]"
            },
            "diskSizeGB": "[parameters('sharedVariables').media.vhdManagedDiskSize]"
          }
        },
        //Attach managed disk to existing VM
        {
          "apiVersion": "2017-03-30",
          "type": "Microsoft.Compute/virtualMachines",
          "name": "[parameters('vmName')]",
          "location": "[resourceGroup().location]",
          "dependsOn": [ "[concat(parameters('vmName'),'-mediadisk-001')]" ],
          "properties": {
            "storageProfile": {
              "dataDisks": [
                {
                  "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
                  "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
                  "createOption": "Attach",
                  "managedDisk": {
                    "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
                  }
                }
              ]
            }
          }
        }
    ]
    

    "resources" : [
        {
          "apiVersion": "2017-03-30",
          "type": "Microsoft.Compute/virtualMachines",
          "name": "[parameters('vmName')]",
          "location": "[resourceGroup().location]",
          "dependsOn": [],
          "properties": {
            "storageProfile": {
              "dataDisks": [
                {
                  "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
                  "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
                  "createOption": "FromImage",
                  "image": {
                    "uri": "concat(parameters('vmName'),'-mediadisk-001')"
                  },
                  "vhd": {
                    "uri": "[parameters('sharedVariables').media.sourceVhdUri]"
                  },
                  "managedDisk": {
                      "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
                  }
                }
              ]
            }
          }
        }
    ]
    

    "Addition of a blob based disk to VM with managed disks is not supported 。真的吗?这是不是说不能同时使用托管磁盘和存储帐户磁盘?最后一次尝试,我删除了以下行:

    "managedDisk": {
                  "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
              }
    

    但同样的错误。

    我可以在门户中重新连接磁盘,我唯一的另一个想法是创建另一个磁盘,而无需返回到存储帐户磁盘 copy[]

    TIA

    使现代化

    1 回复  |  直到 7 年前
        1
  •  2
  •   4c74356b41    7 年前

    因此,它分离现有磁盘,因为它使用声明性方法。您的第二个部署只定义了一个数据磁盘,因此它可以满足您的要求。虚拟机上有1个磁盘。

    你真的没有很多选择来克服这一点。使用外部工具(如powershell)为您创建json并直接传递,或者使用arm模板创建包含所有磁盘的json对象并将其传递到资源中。

          [
            {
              "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
              "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
              "createOption": "Attach",
              "managedDisk": {
                "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
              }
            },
            {
              "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
              "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
              "createOption": "Attach",
              "managedDisk": {
                "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
              }
            }
          ]
    

    @(@{lun=xxx;...},@{...})