mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Automatic merge from release/2.5.0 -> release/2.6.0
* commit 'e38f007c512e27f00630a34629006067660b6db8': implement baremetal host driver minor updates
This commit is contained in:
@@ -815,11 +815,10 @@ func FetchModelObjects(modelManager IModelManager, query *sqlchemy.SQuery, targe
|
||||
return nil
|
||||
}
|
||||
|
||||
func DoCreate(manager IModelManager, ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (IModel, error) {
|
||||
ownerProjId, err := fetchOwnerProjectId(ctx, manager, userCred, data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
func DoCreate(manager IModelManager, ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject, ownerProjId string) (IModel, error) {
|
||||
lockman.LockClass(ctx, manager, ownerProjId)
|
||||
defer lockman.ReleaseClass(ctx, manager, ownerProjId)
|
||||
|
||||
return doCreateItem(manager, ctx, userCred, ownerProjId, nil, data)
|
||||
}
|
||||
|
||||
@@ -908,22 +907,18 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils
|
||||
return nil, httperrors.NewForbiddenError("Not allow to create item")
|
||||
}
|
||||
|
||||
model, err := func() (IModel, error) {
|
||||
lockman.LockClass(ctx, dispatcher.modelManager, ownerProjId)
|
||||
defer lockman.ReleaseClass(ctx, dispatcher.modelManager, ownerProjId)
|
||||
|
||||
return doCreateItem(dispatcher.modelManager, ctx, userCred, ownerProjId, query, data)
|
||||
}()
|
||||
|
||||
model, err := DoCreate(dispatcher.modelManager, ctx, userCred, query, data, ownerProjId)
|
||||
if err != nil {
|
||||
log.Errorf("fail to doCreateItem %s", err)
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
|
||||
lockman.LockObject(ctx, model)
|
||||
defer lockman.ReleaseObject(ctx, model)
|
||||
func() {
|
||||
lockman.LockObject(ctx, model)
|
||||
defer lockman.ReleaseObject(ctx, model)
|
||||
|
||||
model.PostCreate(ctx, userCred, ownerProjId, query, data)
|
||||
model.PostCreate(ctx, userCred, ownerProjId, query, data)
|
||||
}()
|
||||
|
||||
OpsLog.LogEvent(model, ACT_CREATE, model.GetShortDesc(ctx), userCred)
|
||||
logclient.AddActionLog(model, logclient.ACT_CREATE, "", userCred, true)
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package hostdrivers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/compute/models"
|
||||
)
|
||||
|
||||
type SBaremetalHostDriver struct {
|
||||
SBaseHostDriver
|
||||
}
|
||||
|
||||
func init() {
|
||||
driver := SBaremetalHostDriver{}
|
||||
models.RegisterHostDriver(&driver)
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) GetHostType() string {
|
||||
return models.HOST_TYPE_BAREMETAL
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) CheckAndSetCacheImage(ctx context.Context, host *models.SHost, storageCache *models.SStoragecache, task taskman.ITask) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestAllocateDiskOnStorage(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, content *jsonutils.JSONDict) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestDeallocateDiskOnHost(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestPrepareSaveDiskOnHost(ctx context.Context, host *models.SHost, disk *models.SDisk, imageId string, task taskman.ITask) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestRebuildDiskOnStorage(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, content *jsonutils.JSONDict) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestResizeDiskOnHost(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, sizeMb int64, task taskman.ITask) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestResizeDiskOnHostOnline(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, sizeMb int64, task taskman.ITask) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestSaveUploadImageOnHost(ctx context.Context, host *models.SHost, disk *models.SDisk, imageId string, task taskman.ITask, data jsonutils.JSONObject) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
|
||||
func (self *SBaremetalHostDriver) RequestUncacheImage(ctx context.Context, host *models.SHost, storageCache *models.SStoragecache, task taskman.ITask) error {
|
||||
return fmt.Errorf("not supported")
|
||||
}
|
||||
@@ -1946,18 +1946,17 @@ func (self *SHost) GetBaremetalServer() *SGuest {
|
||||
if !self.IsBaremetal {
|
||||
return nil
|
||||
}
|
||||
guestObj, err := db.NewModelObject(GuestManager)
|
||||
if err != nil {
|
||||
log.Errorf("%s", err)
|
||||
return nil
|
||||
}
|
||||
guest := SGuest{}
|
||||
guest.SetModelManager(GuestManager)
|
||||
q := GuestManager.Query().Equals("host_id", self.Id).Equals("hypervisor", HOST_TYPE_BAREMETAL)
|
||||
err = q.First(guestObj)
|
||||
err := q.First(&guest)
|
||||
if err != nil {
|
||||
log.Errorf("query fail %s", err)
|
||||
if err != sql.ErrNoRows {
|
||||
log.Errorf("query fail %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return guestObj.(*SGuest)
|
||||
return &guest
|
||||
}
|
||||
|
||||
func (self *SHost) getSchedtags() []SSchedtag {
|
||||
@@ -3283,10 +3282,16 @@ func (self *SHost) PerformConvertHypervisor(ctx context.Context, userCred mcclie
|
||||
if err != nil {
|
||||
return nil, httperrors.NewNotAcceptableError("Convert error: %s", err.Error())
|
||||
}
|
||||
guest, err := db.DoCreate(GuestManager, ctx, userCred, nil, params)
|
||||
ownerProjId := userCred.GetProjectId()
|
||||
guest, err := db.DoCreate(GuestManager, ctx, userCred, nil, params, ownerProjId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
func() {
|
||||
lockman.LockObject(ctx, guest)
|
||||
defer lockman.ReleaseObject(ctx, guest)
|
||||
guest.PostCreate(ctx, userCred, ownerProjId, nil, params)
|
||||
}()
|
||||
log.Infof("Host convert to %s", guest.GetName())
|
||||
db.OpsLog.LogEvent(self, db.ACT_CONVERT_START, "", userCred)
|
||||
db.OpsLog.LogEvent(guest, db.ACT_CREATE, "Convert hypervisor", userCred)
|
||||
|
||||
Reference in New Issue
Block a user