fix(region): disk choice master host with os arch

This commit is contained in:
Qu Xuan
2021-09-15 12:17:33 +08:00
parent b6fc27d64f
commit a51b977953
3 changed files with 45 additions and 4 deletions
+13 -3
View File
@@ -74,10 +74,20 @@ const (
OS_ARCH_AARCH64 = "aarch64"
)
func IsARM(osArch string) bool {
return utils.IsInStringArray(osArch, []string{
var (
ARCH_X86 = []string{
OS_ARCH_X86,
OS_ARCH_I386,
OS_ARCH_X86_32,
OS_ARCH_X86_64,
}
ARCH_ARM = []string{
OS_ARCH_ARM,
OS_ARCH_AARCH32,
OS_ARCH_AARCH64,
})
}
)
func IsARM(osArch string) bool {
return utils.IsInStringArray(osArch, ARCH_ARM)
}
+26
View File
@@ -1223,6 +1223,32 @@ func (self *SDisk) GetPathAtHost(host *SHost) string {
return ""
}
func (self *SDisk) GetMasterHost() (*SHost, error) {
hosts := HostManager.Query().SubQuery()
hoststorages := HoststorageManager.Query().SubQuery()
q := hosts.Query().Join(hoststorages, sqlchemy.Equals(hoststorages.Field("host_id"), hosts.Field("id")))
q = q.Filter(sqlchemy.Equals(hoststorages.Field("storage_id"), self.StorageId))
q = q.IsTrue("enabled")
q = q.Equals("host_status", api.HOST_ONLINE).Asc("id")
guest := self.GetGuest()
if guest != nil && len(guest.OsArch) > 0 {
switch guest.OsArch {
case apis.OS_ARCH_X86:
q = q.In("cpu_architecture", apis.ARCH_X86)
case apis.OS_ARCH_ARM:
q = q.In("cpu_architecture", apis.ARCH_ARM)
}
}
host := SHost{}
host.SetModelManager(HostManager, &host)
err := q.First(&host)
if err != nil {
return nil, errors.Wrapf(err, "q.First")
}
return &host, nil
}
func (self *SDisk) GetFetchUrl() string {
storage, _ := self.GetStorage()
if storage == nil {
+6 -1
View File
@@ -20,6 +20,7 @@ import (
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/pkg/errors"
"yunion.io/x/pkg/util/stringutils"
api "yunion.io/x/onecloud/pkg/apis/compute"
@@ -54,7 +55,11 @@ func (self *DiskCreateTask) OnStorageCacheImageComplete(ctx context.Context, dis
db.OpsLog.LogEvent(disk, db.ACT_DELOCATE, disk.GetShortDesc(ctx), self.GetUserCred())
}
storage, _ := disk.GetStorage()
host := storage.GetMasterHost()
host, err := disk.GetMasterHost()
if err != nil {
self.OnStartAllocateFailed(ctx, disk, jsonutils.NewString(errors.Wrapf(err, "GetMasterHost").Error()))
return
}
db.OpsLog.LogEvent(disk, db.ACT_ALLOCATING, disk.GetShortDesc(ctx), self.GetUserCred())
disk.SetStatus(self.GetUserCred(), api.DISK_STARTALLOC, fmt.Sprintf("Disk start alloc use host %s(%s)", host.Name, host.Id))
if rebuild && storage.StorageType == api.STORAGE_RBD {