From b4c3ce139fa2a2f6a7c932ac2bee0b9c36b3651f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 14 Nov 2018 21:46:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=9B=B4=E6=96=B0Azure=20dis?= =?UTF-8?q?k=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/hostdrivers/azure.go | 8 ++++++++ pkg/compute/hostdrivers/base.go | 5 +++++ pkg/compute/models/disks.go | 19 +++++++++++++++++++ pkg/compute/models/hostdrivers.go | 2 ++ 4 files changed, 34 insertions(+) diff --git a/pkg/compute/hostdrivers/azure.go b/pkg/compute/hostdrivers/azure.go index 76cbb9b5c5..6635e9c879 100644 --- a/pkg/compute/hostdrivers/azure.go +++ b/pkg/compute/hostdrivers/azure.go @@ -13,6 +13,7 @@ import ( "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" + "yunion.io/x/onecloud/pkg/mcclient" ) type SAzureHostDriver struct { @@ -28,6 +29,13 @@ func (self *SAzureHostDriver) GetHostType() string { return models.HOST_TYPE_AZURE } +func (self *SAzureHostDriver) ValidateUpdateDisk(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { + if data.Contains("name") { + return nil, httperrors.NewInputParameterError("cannot support change azure disk name") + } + return data, nil +} + func (self *SAzureHostDriver) CheckAndSetCacheImage(ctx context.Context, host *models.SHost, storageCache *models.SStoragecache, task taskman.ITask) error { params := task.GetParams() imageId, err := params.GetString("image_id") diff --git a/pkg/compute/hostdrivers/base.go b/pkg/compute/hostdrivers/base.go index 08f3dd0125..a4c833a9ae 100644 --- a/pkg/compute/hostdrivers/base.go +++ b/pkg/compute/hostdrivers/base.go @@ -7,11 +7,16 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/mcclient" ) type SBaseHostDriver struct { } +func (self *SBaseHostDriver) ValidateUpdateDisk(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { + return data, nil +} + func (self *SBaseHostDriver) RequestDeleteSnapshotsWithStorage(ctx context.Context, host *models.SHost, snapshot *models.SSnapshot, task taskman.ITask) error { return fmt.Errorf("Not Implement") } diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 81be9e7eee..62ece7fc90 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -228,6 +228,25 @@ func (self *SDisk) CustomizeCreate(ctx context.Context, userCred mcclient.TokenC return self.SSharableVirtualResourceBase.CustomizeCreate(ctx, userCred, ownerProjId, query, data) } +func (self *SDisk) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { + storage := self.GetStorage() + if storage == nil { + return nil, httperrors.NewNotFoundError("failed to find storage for disk %s", self.Name) + } + + host := storage.GetMasterHost() + if host == nil { + return nil, httperrors.NewNotFoundError("failed to find host for storage %s with disk %s", storage.Name, self.Name) + } + + data, err := host.GetHostDriver().ValidateUpdateDisk(ctx, userCred, data) + if err != nil { + return nil, err + } + + return self.SVirtualResourceBase.ValidateUpdateData(ctx, userCred, query, data) +} + func (manager *SDiskManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerProjId string, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { if disk, err := data.Get("disk"); err != nil { return nil, err diff --git a/pkg/compute/models/hostdrivers.go b/pkg/compute/models/hostdrivers.go index 294c5f03ea..b1b5752a5f 100644 --- a/pkg/compute/models/hostdrivers.go +++ b/pkg/compute/models/hostdrivers.go @@ -7,11 +7,13 @@ import ( "yunion.io/x/log" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" + "yunion.io/x/onecloud/pkg/mcclient" ) type IHostDriver interface { GetHostType() string CheckAndSetCacheImage(ctx context.Context, host *SHost, storagecache *SStoragecache, task taskman.ITask) error + ValidateUpdateDisk(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) RequestPrepareSaveDiskOnHost(ctx context.Context, host *SHost, disk *SDisk, imageId string, task taskman.ITask) error RequestSaveUploadImageOnHost(ctx context.Context, host *SHost, disk *SDisk, imageId string, task taskman.ITask, data jsonutils.JSONObject) error RequestAllocateDiskOnStorage(ctx context.Context, host *SHost, storage *SStorage, disk *SDisk, task taskman.ITask, content *jsonutils.JSONDict) error