mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
fix(region): disk choice master host with os arch
This commit is contained in:
+13
-3
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user