diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index b3afdb3959..7bc532a0f5 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 f26bb8aeec..4dc94a59cc 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 @@ -1171,6 +1172,7 @@ func (self *SServerSku) syncWithCloudSku(ctx context.Context, userCred mcclient. self.InstanceTypeCategory = extSku.InstanceTypeCategory self.PrepaidStatus = extSku.PrepaidStatus self.PostpaidStatus = extSku.PostpaidStatus + self.CpuArch = extSku.CpuArch self.SysDiskType = extSku.SysDiskType self.DataDiskTypes = extSku.DataDiskTypes return nil