From ce70ab3300283f64277fe2e8adaffb3c2e98dbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Thu, 15 Nov 2018 11:25:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85Azure=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E5=BF=AB=E7=85=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/guestdrivers/aliyun.go | 23 ---------------------- pkg/compute/guestdrivers/managedvirtual.go | 23 ++++++++++++++++++++++ pkg/util/azure/azure.go | 2 +- pkg/util/azure/snapshot.go | 21 ++++++++++++++++++-- 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/pkg/compute/guestdrivers/aliyun.go b/pkg/compute/guestdrivers/aliyun.go index 1a91971127..5dfb5ec2d8 100644 --- a/pkg/compute/guestdrivers/aliyun.go +++ b/pkg/compute/guestdrivers/aliyun.go @@ -483,26 +483,3 @@ func (self *SAliyunGuestDriver) OnGuestDeployTaskDataReceived(ctx context.Contex func (self *SAliyunGuestDriver) AllowReconfigGuest() bool { return true } - -func (self *SAliyunGuestDriver) RequestDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, snapshotId, diskId string) error { - iDisk, _ := models.DiskManager.FetchById(diskId) - disk := iDisk.(*models.SDisk) - providerDisk, err := disk.GetIDisk() - if err != nil { - return err - } - iSnapshot, _ := models.SnapshotManager.FetchById(snapshotId) - snapshot := iSnapshot.(*models.SSnapshot) - taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { - cloudSnapshot, err := providerDisk.CreateISnapshot(snapshot.Name, "") - if err != nil { - return nil, err - } - res := jsonutils.NewDict() - res.Set("snapshot_id", jsonutils.NewString(cloudSnapshot.GetId())) - res.Set("manager_id", jsonutils.NewString(cloudSnapshot.GetManagerId())) - res.Set("cloudregion_id", jsonutils.NewString(cloudSnapshot.GetRegionId())) - return res, nil - }) - return nil -} diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index 0a8388410f..f3e7458173 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -351,3 +351,26 @@ func (self *SManagedVirtualizedGuestDriver) RequestSyncConfigOnHost(ctx context. }) return nil } + +func (self *SManagedVirtualizedGuestDriver) RequestDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, snapshotId, diskId string) error { + iDisk, _ := models.DiskManager.FetchById(diskId) + disk := iDisk.(*models.SDisk) + providerDisk, err := disk.GetIDisk() + if err != nil { + return err + } + iSnapshot, _ := models.SnapshotManager.FetchById(snapshotId) + snapshot := iSnapshot.(*models.SSnapshot) + taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { + cloudSnapshot, err := providerDisk.CreateISnapshot(snapshot.Name, "") + if err != nil { + return nil, err + } + res := jsonutils.NewDict() + res.Set("snapshot_id", jsonutils.NewString(cloudSnapshot.GetId())) + res.Set("manager_id", jsonutils.NewString(cloudSnapshot.GetManagerId())) + res.Set("cloudregion_id", jsonutils.NewString(cloudSnapshot.GetRegionId())) + return res, nil + }) + return nil +} diff --git a/pkg/util/azure/azure.go b/pkg/util/azure/azure.go index 651a848e3f..791e6d3fa1 100644 --- a/pkg/util/azure/azure.go +++ b/pkg/util/azure/azure.go @@ -274,7 +274,7 @@ func (self *SAzureClient) checkParams(body jsonutils.JSONObject, params []string for i := 0; i < len(params); i++ { data, err := body.GetString(params[i]) if err != nil { - return nil, fmt.Errorf("Missing %s params") + return nil, fmt.Errorf("Missing %s params", params[i]) } result[params[i]] = data } diff --git a/pkg/util/azure/snapshot.go b/pkg/util/azure/snapshot.go index 5db8d6da4c..429b1451c8 100644 --- a/pkg/util/azure/snapshot.go +++ b/pkg/util/azure/snapshot.go @@ -22,8 +22,9 @@ type SSnapshot struct { Name string Location string ManagedBy string - Sku SnapshotSku + Sku *SnapshotSku Properties DiskProperties + Type string } func (self *SSnapshot) GetId() string { @@ -57,7 +58,23 @@ func (self *SSnapshot) IsEmulated() bool { } func (self *SRegion) CreateSnapshot(diskId, snapName, desc string) (*SSnapshot, error) { - snapshot := SSnapshot{} + disk, err := self.GetDisk(diskId) + if err != nil { + return nil, err + } + snapshot := SSnapshot{ + region: self, + Name: snapName, + Location: self.Name, + Properties: DiskProperties{ + CreationData: CreationData{ + CreateOption: "Copy", + SourceResourceID: diskId, + }, + DiskSizeGB: disk.Properties.DiskSizeGB, + }, + Type: "Microsoft.Compute/snapshots", + } return &snapshot, self.client.Create(jsonutils.Marshal(snapshot), &snapshot) }