From 0413898aa7d71fa961a165a49bed29180fd92367 Mon Sep 17 00:00:00 2001 From: tangbin Date: Thu, 7 Jan 2021 20:09:06 +0800 Subject: [PATCH] feat(region): server sku os_arch & cpu_arch checking --- pkg/compute/models/guests.go | 7 +++++++ pkg/compute/models/skus.go | 6 ++++-- pkg/hostman/guestman/forwarder/api/forwarder.pb.go | 5 +++-- pkg/hostman/guestman/forwarder/api/forwarder_grpc.pb.go | 1 + 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 0763e42e18..c2bec3b735 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -1324,6 +1324,13 @@ func (manager *SGuestManager) validateCreateData( } log.Debugf("ROOT DISK: %#v", rootDiskConfig) input.Disks[0] = rootDiskConfig + if sku != nil { + if len(rootDiskConfig.OsArch) >= 0 && len(sku.CpuArch) >= 0 { + if strings.Contains(rootDiskConfig.OsArch, sku.CpuArch) { + return nil, httperrors.NewConflictError("root disk image(%s) and sku(%s) architecture mismatch", rootDiskConfig.OsArch, sku.CpuArch) + } + } + } //data.Set("disk.0", jsonutils.Marshal(rootDiskConfig)) for i := 0; i < len(dataDiskDefs); i += 1 { diff --git a/pkg/compute/models/skus.go b/pkg/compute/models/skus.go index b7ebd4646c..8d8112c2ab 100644 --- a/pkg/compute/models/skus.go +++ b/pkg/compute/models/skus.go @@ -88,8 +88,9 @@ type SServerSku struct { PrepaidStatus string `width:"32" charset:"utf8" nullable:"true" list:"user" create:"admin_optional" default:"available"` // 预付费资源状态 available|soldout PostpaidStatus string `width:"32" charset:"utf8" nullable:"true" list:"user" create:"admin_optional" default:"available"` // 按需付费资源状态 available|soldout - CpuCoreCount int `nullable:"false" list:"user" create:"admin_required"` - MemorySizeMB int `nullable:"false" list:"user" create:"admin_required"` + CpuArch string `width:"16" charset:"ascii" nullable:"true" list:"user" create:"admin_optional" update:"admin"` // CPU 架构 x86|xarm + CpuCoreCount int `nullable:"false" list:"user" create:"admin_required"` + MemorySizeMB int `nullable:"false" list:"user" create:"admin_required"` OsName string `width:"32" charset:"ascii" nullable:"true" list:"user" create:"admin_optional" update:"admin" default:"Any"` // Windows|Linux|Any @@ -1148,6 +1149,7 @@ func (self *SServerSku) syncWithCloudSku(ctx context.Context, userCred mcclient. self.ZoneId = extSku.ZoneId self.PrepaidStatus = extSku.PrepaidStatus self.PostpaidStatus = extSku.PostpaidStatus + self.CpuArch = extSku.CpuArch self.SysDiskType = extSku.SysDiskType self.DataDiskTypes = extSku.DataDiskTypes return nil diff --git a/pkg/hostman/guestman/forwarder/api/forwarder.pb.go b/pkg/hostman/guestman/forwarder/api/forwarder.pb.go index b964fbf567..98be03cca4 100644 --- a/pkg/hostman/guestman/forwarder/api/forwarder.pb.go +++ b/pkg/hostman/guestman/forwarder/api/forwarder.pb.go @@ -7,10 +7,11 @@ package api import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( diff --git a/pkg/hostman/guestman/forwarder/api/forwarder_grpc.pb.go b/pkg/hostman/guestman/forwarder/api/forwarder_grpc.pb.go index 0e9c59f837..25af0b9d16 100644 --- a/pkg/hostman/guestman/forwarder/api/forwarder_grpc.pb.go +++ b/pkg/hostman/guestman/forwarder/api/forwarder_grpc.pb.go @@ -4,6 +4,7 @@ package api import ( context "context" + grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status"