diff --git a/pkg/compute/guestdrivers/azure.go b/pkg/compute/guestdrivers/azure.go index d3e274cc0d..4e03c1a5dd 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" @@ -89,7 +90,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 190ef50e72..8d9207b7c2 100644 --- a/pkg/compute/guestdrivers/base.go +++ b/pkg/compute/guestdrivers/base.go @@ -116,6 +116,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 14bf4f54fe..d8045e6511 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 f274b28816..a8911ac012 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -579,6 +579,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())