mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #3437 from swordqiu/hotfix/qj-baremetal-create-action-log
fix: missing action log for baremetal create and prepare events
This commit is contained in:
+18
-14
@@ -508,6 +508,10 @@ func (b *SBaremetalInstance) GetClientSession() *mcclient.ClientSession {
|
||||
return b.manager.GetClientSession()
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) Keyword() string {
|
||||
return "host"
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) GetId() string {
|
||||
id, err := b.desc.GetString("id")
|
||||
if err != nil {
|
||||
@@ -1463,9 +1467,9 @@ func (b *SBaremetalInstance) remove() {
|
||||
b.desc = nil
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartNewTask(factory tasks.TaskFactory, taskId string, data jsonutils.JSONObject) {
|
||||
func (b *SBaremetalInstance) StartNewTask(factory tasks.TaskFactory, userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) {
|
||||
go func() {
|
||||
task := factory(b, taskId, data)
|
||||
task := factory(userCred, b, taskId, data)
|
||||
b.SetTask(task)
|
||||
}()
|
||||
}
|
||||
@@ -1477,29 +1481,29 @@ func (b *SBaremetalInstance) StartBaremetalMaintenanceTask(userCred mcclient.Tok
|
||||
if jsonutils.QueryBoolean(data, "guest_running", false) {
|
||||
data.(*jsonutils.JSONDict).Set("soft_reboot", jsonutils.JSONTrue)
|
||||
}
|
||||
b.StartNewTask(tasks.NewBaremetalMaintenanceTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalMaintenanceTask, userCred, taskId, data)
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartBaremetalUnmaintenanceTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) {
|
||||
b.StartNewTask(tasks.NewBaremetalUnmaintenanceTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalUnmaintenanceTask, userCred, taskId, data)
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartBaremetalReprepareTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) {
|
||||
b.StartNewTask(tasks.NewBaremetalReprepareTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalReprepareTask, userCred, taskId, data)
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartBaremetalResetBMCTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) error {
|
||||
b.StartNewTask(tasks.NewBaremetalResetBMCTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalResetBMCTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartBaremetalIpmiProbeTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) error {
|
||||
b.StartNewTask(tasks.NewBaremetalIpmiProbeTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalIpmiProbeTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartBaremetalCdromTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) error {
|
||||
b.StartNewTask(tasks.NewBaremetalCdromTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalCdromTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1527,7 +1531,7 @@ func (b *SBaremetalInstance) StartServerCreateTask(userCred mcclient.TokenCreden
|
||||
if err := b.AutoSaveDesc(); err != nil {
|
||||
return err
|
||||
}
|
||||
b.StartNewTask(tasks.NewBaremetalServerCreateTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalServerCreateTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1539,7 +1543,7 @@ func (b *SBaremetalInstance) StartServerDeployTask(userCred mcclient.TokenCreden
|
||||
if err := b.GetServer().SaveDesc(desc); err != nil {
|
||||
return fmt.Errorf("Save server desc: %v", err)
|
||||
}
|
||||
b.StartNewTask(tasks.NewBaremetalServerDeployTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalServerDeployTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1551,22 +1555,22 @@ func (b *SBaremetalInstance) StartServerRebuildTask(userCred mcclient.TokenCrede
|
||||
if err := b.GetServer().SaveDesc(desc); err != nil {
|
||||
return fmt.Errorf("Save server desc: %v", err)
|
||||
}
|
||||
b.StartNewTask(tasks.NewBaremetalServerRebuildTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalServerRebuildTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartServerStartTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) error {
|
||||
b.StartNewTask(tasks.NewBaremetalServerStartTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalServerStartTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartServerStopTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) error {
|
||||
b.StartNewTask(tasks.NewBaremetalServerStopTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalServerStopTask, userCred, taskId, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) StartServerDestroyTask(userCred mcclient.TokenCredential, taskId string, data jsonutils.JSONObject) {
|
||||
b.StartNewTask(tasks.NewBaremetalServerDestroyTask, taskId, data)
|
||||
b.StartNewTask(tasks.NewBaremetalServerDestroyTask, userCred, taskId, data)
|
||||
}
|
||||
|
||||
func (b *SBaremetalInstance) DelayedSyncIPMIInfo(data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
|
||||
|
||||
@@ -150,6 +150,8 @@ type ITask interface {
|
||||
SetSSHStageParams(remoteIP string, passwd string)
|
||||
SSHExecute(remoteIP string, passwd string, args interface{})
|
||||
NeedPXEBoot() bool
|
||||
|
||||
GetStartTime() time.Time
|
||||
}
|
||||
|
||||
func NewTaskQueue() *TaskQueue {
|
||||
@@ -178,7 +180,7 @@ func (q *TaskQueue) AppendTask(task ITask) *TaskQueue {
|
||||
return q
|
||||
}
|
||||
|
||||
type TaskFactory func(bm IBaremetal, taskId string, data jsonutils.JSONObject) ITask
|
||||
type TaskFactory func(userCred mcclient.TokenCredential, bm IBaremetal, taskId string, data jsonutils.JSONObject) ITask
|
||||
|
||||
type SBaremetalTaskBase struct {
|
||||
object.SObject
|
||||
@@ -190,17 +192,23 @@ type SBaremetalTaskBase struct {
|
||||
sshStageFunc SSHTaskStageFunc
|
||||
taskId string
|
||||
data jsonutils.JSONObject
|
||||
|
||||
startTime time.Time
|
||||
}
|
||||
|
||||
func newBaremetalTaskBase(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) SBaremetalTaskBase {
|
||||
task := SBaremetalTaskBase{
|
||||
Baremetal: baremetal,
|
||||
userCred: userCred,
|
||||
taskId: taskId,
|
||||
data: data,
|
||||
|
||||
startTime: time.Now().UTC(),
|
||||
}
|
||||
return task
|
||||
}
|
||||
@@ -209,6 +217,10 @@ func (task *SBaremetalTaskBase) ITask() ITask {
|
||||
return task.GetVirtualObject().(ITask)
|
||||
}
|
||||
|
||||
func (task *SBaremetalTaskBase) GetStartTime() time.Time {
|
||||
return task.startTime
|
||||
}
|
||||
|
||||
func (task *SBaremetalTaskBase) GetTaskQueue() *TaskQueue {
|
||||
return task.Baremetal.GetTaskQueue()
|
||||
}
|
||||
@@ -339,11 +351,12 @@ type SBaremetalPXEBootTaskBase struct {
|
||||
}
|
||||
|
||||
func newBaremetalPXEBootTaskBase(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) SBaremetalPXEBootTaskBase {
|
||||
baseTask := newBaremetalTaskBase(baremetal, taskId, data)
|
||||
baseTask := newBaremetalTaskBase(userCred, baremetal, taskId, data)
|
||||
task := SBaremetalPXEBootTaskBase{
|
||||
SBaremetalTaskBase: baseTask,
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/pkg/utils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -37,12 +38,13 @@ type SBaremetalServerBaseDeployTask struct {
|
||||
}
|
||||
|
||||
func newBaremetalServerBaseDeployTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) SBaremetalServerBaseDeployTask {
|
||||
task := SBaremetalServerBaseDeployTask{
|
||||
SBaremetalPXEBootTaskBase: newBaremetalPXEBootTaskBase(baremetal, taskId, data),
|
||||
SBaremetalPXEBootTaskBase: newBaremetalPXEBootTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
// any inheritance must call:
|
||||
// task.SetStage(task.InitPXEBootTask)
|
||||
|
||||
@@ -35,17 +35,22 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/compute/baremetal"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/modules"
|
||||
"yunion.io/x/onecloud/pkg/util/logclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
"yunion.io/x/onecloud/pkg/util/sysutils"
|
||||
)
|
||||
|
||||
type sBaremetalPrepareTask struct {
|
||||
baremetal IBaremetal
|
||||
startTime time.Time
|
||||
userCred mcclient.TokenCredential
|
||||
}
|
||||
|
||||
func newBaremetalPrepareTask(baremetal IBaremetal) *sBaremetalPrepareTask {
|
||||
func newBaremetalPrepareTask(baremetal IBaremetal, userCred mcclient.TokenCredential) *sBaremetalPrepareTask {
|
||||
return &sBaremetalPrepareTask{
|
||||
baremetal: baremetal,
|
||||
userCred: userCred,
|
||||
startTime: time.Now().UTC(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +65,10 @@ type baremetalPrepareInfo struct {
|
||||
ipmiInfo *types.SIPMIInfo
|
||||
}
|
||||
|
||||
func (task *sBaremetalPrepareTask) GetStartTime() time.Time {
|
||||
return task.startTime
|
||||
}
|
||||
|
||||
func (task *sBaremetalPrepareTask) prepareBaremetalInfo(cli *ssh.Client) (*baremetalPrepareInfo, error) {
|
||||
_, err := cli.Run("/lib/mos/sysinit.sh")
|
||||
if err != nil {
|
||||
@@ -286,15 +295,18 @@ func (task *sBaremetalPrepareTask) configIPMISetting(cli *ssh.Client, i *baremet
|
||||
func (task *sBaremetalPrepareTask) DoPrepare(cli *ssh.Client) error {
|
||||
infos, err := task.prepareBaremetalInfo(cli)
|
||||
if err != nil {
|
||||
logclient.AddActionLogWithStartable(task, task.baremetal, logclient.ACT_PREPARE, err, task.userCred, false)
|
||||
return err
|
||||
}
|
||||
|
||||
// set ipmi nic address and user password
|
||||
if err = task.configIPMISetting(cli, infos); err != nil {
|
||||
logclient.AddActionLogWithStartable(task, task.baremetal, logclient.ACT_PREPARE, err, task.userCred, false)
|
||||
return err
|
||||
}
|
||||
|
||||
if err = task.updateBmInfo(cli, infos); err != nil {
|
||||
logclient.AddActionLogWithStartable(task, task.baremetal, logclient.ACT_PREPARE, err, task.userCred, false)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -304,6 +316,8 @@ func (task *sBaremetalPrepareTask) DoPrepare(cli *ssh.Client) error {
|
||||
log.Errorf("SetNTP fail: %s", err)
|
||||
}
|
||||
|
||||
logclient.AddActionLogWithStartable(task, task.baremetal, logclient.ACT_PREPARE, infos.sysInfo, task.userCred, true)
|
||||
|
||||
log.Infof("Prepare complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
o "yunion.io/x/onecloud/pkg/baremetal/options"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/types"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/fileutils2"
|
||||
"yunion.io/x/onecloud/pkg/util/httputils"
|
||||
"yunion.io/x/onecloud/pkg/util/redfish"
|
||||
@@ -35,12 +36,13 @@ type SBaremetalCdromTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalCdromTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalCdromTask{
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(baremetal, taskId, data),
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -28,12 +29,13 @@ type SBaremetalServerCreateTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalServerCreateTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalServerCreateTask{
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(baremetal, taskId, data),
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.InitPXEBootTask)
|
||||
|
||||
@@ -17,6 +17,7 @@ package tasks
|
||||
import (
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -25,12 +26,13 @@ type SBaremetalServerDeployTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalServerDeployTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalServerDeployTask{
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(baremetal, taskId, data),
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.InitPXEBootTask)
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -26,12 +27,13 @@ type SBaremetalServerDestroyTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalServerDestroyTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalServerDestroyTask{
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(baremetal, taskId, data),
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.InitPXEBootTask)
|
||||
|
||||
@@ -26,6 +26,8 @@ import (
|
||||
)
|
||||
|
||||
type IBaremetal interface {
|
||||
Keyword() string
|
||||
|
||||
GetId() string
|
||||
GetZoneId() string
|
||||
GetStorageCacheId() string
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/baremetal/utils/ipmitool"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/types"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/modules"
|
||||
"yunion.io/x/onecloud/pkg/util/redfish"
|
||||
)
|
||||
@@ -36,12 +37,13 @@ type SBaremetalIpmiProbeTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalIpmiProbeTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalIpmiProbeTask{
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(baremetal, taskId, data),
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.DoIpmiProbe)
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -27,12 +28,13 @@ type SBaremetalMaintenanceTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalMaintenanceTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalMaintenanceTask{
|
||||
SBaremetalPXEBootTaskBase: newBaremetalPXEBootTaskBase(baremetal, taskId, data),
|
||||
SBaremetalPXEBootTaskBase: newBaremetalPXEBootTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.InitPXEBootTask)
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"yunion.io/x/log"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/baremetal/status"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/auth"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -31,7 +32,7 @@ func NewBaremetalServerPrepareTask(
|
||||
baremetal IBaremetal,
|
||||
) *SBaremetalServerPrepareTask {
|
||||
task := &SBaremetalServerPrepareTask{
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(baremetal, "", nil),
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(auth.AdminCredential(), baremetal, "", nil),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetSSHStage(task.OnPXEBootRequest)
|
||||
@@ -48,7 +49,7 @@ func (self *SBaremetalServerPrepareTask) GetName() string {
|
||||
|
||||
// OnPXEBootRequest called by notify api handler
|
||||
func (self *SBaremetalServerPrepareTask) OnPXEBootRequest(ctx context.Context, cli *ssh.Client, args interface{}) error {
|
||||
err := newBaremetalPrepareTask(self.Baremetal).DoPrepare(cli)
|
||||
err := newBaremetalPrepareTask(self.Baremetal, self.userCred).DoPrepare(cli)
|
||||
if err != nil {
|
||||
log.Errorf("Prepare failed: %v", err)
|
||||
self.Baremetal.SyncStatus(status.PREPARE_FAIL, err.Error())
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -27,12 +28,13 @@ type SBaremetalServerRebuildTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalServerRebuildTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalServerRebuildTask{
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(baremetal, taskId, data),
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.InitPXEBootTask)
|
||||
|
||||
@@ -17,6 +17,7 @@ package tasks
|
||||
import (
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -25,12 +26,13 @@ type SBaremetalReprepareTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalReprepareTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalReprepareTask{
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(baremetal, taskId, data),
|
||||
SBaremetalServerBaseDeployTask: newBaremetalServerBaseDeployTask(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.InitPXEBootTask)
|
||||
@@ -42,7 +44,7 @@ func (self *SBaremetalReprepareTask) GetName() string {
|
||||
}
|
||||
|
||||
func (self *SBaremetalReprepareTask) DoDeploys(term *ssh.Client) (jsonutils.JSONObject, error) {
|
||||
task := newBaremetalPrepareTask(self.Baremetal)
|
||||
task := newBaremetalPrepareTask(self.Baremetal, self.userCred)
|
||||
err := task.DoPrepare(term)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
|
||||
"yunion.io/x/onecloud/pkg/baremetal/utils/ipmitool"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/types"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/ssh"
|
||||
)
|
||||
|
||||
@@ -31,12 +32,13 @@ type SBaremetalResetBMCTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalResetBMCTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalResetBMCTask{
|
||||
SBaremetalPXEBootTaskBase: newBaremetalPXEBootTaskBase(baremetal, taskId, data),
|
||||
SBaremetalPXEBootTaskBase: newBaremetalPXEBootTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.InitPXEBootTask)
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"yunion.io/x/pkg/errors"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/types"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
)
|
||||
|
||||
type SBaremetalServerStartTask struct {
|
||||
@@ -29,12 +30,13 @@ type SBaremetalServerStartTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalServerStartTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalServerStartTask{
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(baremetal, taskId, data),
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.DoBoot)
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"yunion.io/x/pkg/errors"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/types"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
)
|
||||
|
||||
type SBaremetalServerStopTask struct {
|
||||
@@ -30,12 +31,13 @@ type SBaremetalServerStopTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalServerStopTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalServerStopTask{
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(baremetal, taskId, data),
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.DoStop)
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
|
||||
baremetalstatus "yunion.io/x/onecloud/pkg/baremetal/status"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/types"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
)
|
||||
|
||||
type SBaremetalUnmaintenanceTask struct {
|
||||
@@ -29,12 +30,13 @@ type SBaremetalUnmaintenanceTask struct {
|
||||
}
|
||||
|
||||
func NewBaremetalUnmaintenanceTask(
|
||||
userCred mcclient.TokenCredential,
|
||||
baremetal IBaremetal,
|
||||
taskId string,
|
||||
data jsonutils.JSONObject,
|
||||
) ITask {
|
||||
task := &SBaremetalUnmaintenanceTask{
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(baremetal, taskId, data),
|
||||
SBaremetalTaskBase: newBaremetalTaskBase(userCred, baremetal, taskId, data),
|
||||
}
|
||||
task.SetVirtualObject(task)
|
||||
task.SetStage(task.DoUnmaintenance)
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/compute/models"
|
||||
"yunion.io/x/onecloud/pkg/util/logclient"
|
||||
)
|
||||
|
||||
type BaremetalCreateTask struct {
|
||||
@@ -34,6 +35,16 @@ func init() {
|
||||
taskman.RegisterTask(BaremetalCreateTask{})
|
||||
}
|
||||
|
||||
func (self *BaremetalCreateTask) taskComplete(ctx context.Context, baremetal *models.SHost) {
|
||||
logclient.AddActionLogWithStartable(self, baremetal, logclient.ACT_ALLOCATE, baremetal.GetShortDesc(ctx), self.UserCred, true)
|
||||
self.SetStageComplete(ctx, nil)
|
||||
}
|
||||
|
||||
func (self *BaremetalCreateTask) taskFailed(ctx context.Context, baremetal *models.SHost, err string) {
|
||||
logclient.AddActionLogWithStartable(self, baremetal, logclient.ACT_ALLOCATE, err, self.UserCred, false)
|
||||
self.SetStageComplete(ctx, nil)
|
||||
}
|
||||
|
||||
func (self *BaremetalCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) {
|
||||
baremetal := obj.(*models.SHost)
|
||||
self.SetStage("OnIpmiProbeComplete", nil)
|
||||
@@ -44,21 +55,21 @@ func (self *BaremetalCreateTask) OnIpmiProbeComplete(ctx context.Context, obj db
|
||||
baremetal := obj.(*models.SHost)
|
||||
ipmiInfo, _ := baremetal.GetIpmiInfo()
|
||||
if !ipmiInfo.Verified {
|
||||
self.SetStageComplete(ctx, nil)
|
||||
self.taskComplete(ctx, baremetal)
|
||||
return
|
||||
}
|
||||
if jsonutils.QueryBoolean(self.Params, "no_prepare", false) {
|
||||
self.SetStageComplete(ctx, nil)
|
||||
self.taskComplete(ctx, baremetal)
|
||||
return
|
||||
}
|
||||
if (baremetal.EnablePxeBoot.IsFalse() || !ipmiInfo.PxeBoot) && !ipmiInfo.CdromBoot {
|
||||
self.SetStageComplete(ctx, nil)
|
||||
self.taskComplete(ctx, baremetal)
|
||||
return
|
||||
}
|
||||
if baremetal.AccessMac == "" && baremetal.Uuid == "" && !ipmiInfo.CdromBoot {
|
||||
msg := "Fail to find access_mac or uuid, host-prepare aborted. Please supply either access_mac or uuid and try host-prepare"
|
||||
log.Errorf(msg)
|
||||
self.SetStageFailed(ctx, msg)
|
||||
self.taskFailed(ctx, baremetal, msg)
|
||||
baremetal.SetStatus(self.UserCred, api.BAREMETAL_PREPARE_FAIL, msg)
|
||||
return
|
||||
}
|
||||
@@ -67,13 +78,16 @@ func (self *BaremetalCreateTask) OnIpmiProbeComplete(ctx context.Context, obj db
|
||||
}
|
||||
|
||||
func (self *BaremetalCreateTask) OnIpmiProbeCompleteFailed(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) {
|
||||
self.SetStageFailed(ctx, body.String())
|
||||
baremetal := obj.(*models.SHost)
|
||||
self.taskFailed(ctx, baremetal, body.String())
|
||||
}
|
||||
|
||||
func (self *BaremetalCreateTask) OnPrepareComplete(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) {
|
||||
self.SetStageComplete(ctx, nil)
|
||||
baremetal := obj.(*models.SHost)
|
||||
self.taskComplete(ctx, baremetal)
|
||||
}
|
||||
|
||||
func (self *BaremetalCreateTask) OnPrepareCompleteFailed(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) {
|
||||
self.SetStageFailed(ctx, body.String())
|
||||
baremetal := obj.(*models.SHost)
|
||||
self.taskFailed(ctx, baremetal, body.String())
|
||||
}
|
||||
|
||||
@@ -171,4 +171,6 @@ const (
|
||||
ACT_LOADBALANCER_DISSOCIATE = "解绑负载均衡"
|
||||
|
||||
ACT_SUBIMAGE_UPDATE = "更新子镜像"
|
||||
|
||||
ACT_PREPARE = "同步硬件配置"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user