Automatic merge from release/2.5.0 -> release/2.6.0

* commit 'e38f007c512e27f00630a34629006067660b6db8':
  implement baremetal host driver
  minor updates
This commit is contained in:
邱剑
2019-02-13 18:26:58 +08:00
3 changed files with 84 additions and 24 deletions
+10 -15
View File
@@ -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)
+60
View File
@@ -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")
}
+14 -9
View File
@@ -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)