From 0764bed0864c4de66273ed713a6ee519890128a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 14 Nov 2018 21:23:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=9B=B4=E6=96=B0Azure=20gue?= =?UTF-8?q?st=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/guestdrivers/azure.go | 21 ++++++++++++++++++++- pkg/compute/guestdrivers/base.go | 4 ++++ pkg/compute/models/guestdrivers.go | 2 ++ pkg/compute/models/guests.go | 5 +++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/pkg/compute/guestdrivers/azure.go b/pkg/compute/guestdrivers/azure.go index 7ea284bec0..558ddeb0cd 100644 --- a/pkg/compute/guestdrivers/azure.go +++ b/pkg/compute/guestdrivers/azure.go @@ -7,6 +7,7 @@ import ( "yunion.io/x/log" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/util/seclib2" "yunion.io/x/pkg/utils" @@ -85,7 +86,25 @@ func (self *SAzureGuestDriver) RequestDetachDisk(ctx context.Context, guest *mod } func (self *SAzureGuestDriver) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { - return self.SManagedVirtualizedGuestDriver.ValidateCreateData(ctx, userCred, data) + data, err := self.SManagedVirtualizedGuestDriver.ValidateCreateData(ctx, userCred, data) + if err != nil { + return nil, err + } + if data.Contains("net.0") && data.Contains("net.1") { + return nil, httperrors.NewInputParameterError("cannot support more than 1 nic") + } + return data, nil +} + +func (self *SAzureGuestDriver) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { + data, err := self.SManagedVirtualizedGuestDriver.ValidateCreateData(ctx, userCred, data) + if err != nil { + return nil, err + } + if data.Contains("name") { + return nil, httperrors.NewInputParameterError("cannot support change azure instance name") + } + return data, nil } func (self *SAzureGuestDriver) RequestDeployGuestOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { diff --git a/pkg/compute/guestdrivers/base.go b/pkg/compute/guestdrivers/base.go index 3f51a26c11..cd62b0e49f 100644 --- a/pkg/compute/guestdrivers/base.go +++ b/pkg/compute/guestdrivers/base.go @@ -115,6 +115,10 @@ func (self *SBaseGuestDriver) ValidateResizeDisk(guest *models.SGuest, disk *mod return fmt.Errorf("This Guest driver dose not implement ValidateResizeDisk") } +func (self *SBaseGuestDriver) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { + return data, nil +} + func (self *SBaseGuestDriver) GetDeployStatus() ([]string, error) { return []string{}, fmt.Errorf("This Guest driver dose not implement GetDeployStatus") } diff --git a/pkg/compute/models/guestdrivers.go b/pkg/compute/models/guestdrivers.go index 4881724058..f2504ff293 100644 --- a/pkg/compute/models/guestdrivers.go +++ b/pkg/compute/models/guestdrivers.go @@ -20,6 +20,8 @@ type IGuestDriver interface { ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) + ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) + ValidateCreateHostData(ctx context.Context, userCred mcclient.TokenCredential, bmName string, host *SHost, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) PrepareDiskRaidConfig(host *SHost, params *jsonutils.JSONDict) error diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index ed60c5836f..6f4ca58e24 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -562,6 +562,11 @@ func (self *SGuest) ValidateUpdateData(ctx context.Context, userCred mcclient.To data.Add(jsonutils.NewInt(int64(vcpuCount)), "vcpu_count") } + data, err = self.GetDriver().ValidateUpdateData(ctx, userCred, data) + if err != nil { + return nil, err + } + err = self.checkUpdateQuota(ctx, userCred, vcpuCount, vmemSize) if err != nil { return nil, httperrors.NewOutOfQuotaError(err.Error())