diff --git a/pkg/baremetal/manager.go b/pkg/baremetal/manager.go index 855ada5f6d..e57d781edd 100644 --- a/pkg/baremetal/manager.go +++ b/pkg/baremetal/manager.go @@ -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) { diff --git a/pkg/baremetal/tasks/base.go b/pkg/baremetal/tasks/base.go index 598b760e02..367face71e 100644 --- a/pkg/baremetal/tasks/base.go +++ b/pkg/baremetal/tasks/base.go @@ -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, } diff --git a/pkg/baremetal/tasks/basedeploy.go b/pkg/baremetal/tasks/basedeploy.go index 6cdcc16bd6..0860de364c 100644 --- a/pkg/baremetal/tasks/basedeploy.go +++ b/pkg/baremetal/tasks/basedeploy.go @@ -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) diff --git a/pkg/baremetal/tasks/baseprepare.go b/pkg/baremetal/tasks/baseprepare.go index 0ead217498..fc15c7e370 100644 --- a/pkg/baremetal/tasks/baseprepare.go +++ b/pkg/baremetal/tasks/baseprepare.go @@ -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 } diff --git a/pkg/baremetal/tasks/cdrom.go b/pkg/baremetal/tasks/cdrom.go index 178c92abb7..878ab00e06 100644 --- a/pkg/baremetal/tasks/cdrom.go +++ b/pkg/baremetal/tasks/cdrom.go @@ -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) diff --git a/pkg/baremetal/tasks/create.go b/pkg/baremetal/tasks/create.go index 7ef726fb36..e0c56186cf 100644 --- a/pkg/baremetal/tasks/create.go +++ b/pkg/baremetal/tasks/create.go @@ -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) diff --git a/pkg/baremetal/tasks/deploy.go b/pkg/baremetal/tasks/deploy.go index 8c754f3954..c973369d4f 100644 --- a/pkg/baremetal/tasks/deploy.go +++ b/pkg/baremetal/tasks/deploy.go @@ -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) diff --git a/pkg/baremetal/tasks/destroy.go b/pkg/baremetal/tasks/destroy.go index af90e412b5..9469d9856e 100644 --- a/pkg/baremetal/tasks/destroy.go +++ b/pkg/baremetal/tasks/destroy.go @@ -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) diff --git a/pkg/baremetal/tasks/interface.go b/pkg/baremetal/tasks/interface.go index f6ef7a07d8..01ecccde3f 100644 --- a/pkg/baremetal/tasks/interface.go +++ b/pkg/baremetal/tasks/interface.go @@ -26,6 +26,8 @@ import ( ) type IBaremetal interface { + Keyword() string + GetId() string GetZoneId() string GetStorageCacheId() string diff --git a/pkg/baremetal/tasks/ipmiprobe.go b/pkg/baremetal/tasks/ipmiprobe.go index 73f9e9846c..d43a834537 100644 --- a/pkg/baremetal/tasks/ipmiprobe.go +++ b/pkg/baremetal/tasks/ipmiprobe.go @@ -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) diff --git a/pkg/baremetal/tasks/maintenance.go b/pkg/baremetal/tasks/maintenance.go index 801c5065d5..2e4a8cacf1 100644 --- a/pkg/baremetal/tasks/maintenance.go +++ b/pkg/baremetal/tasks/maintenance.go @@ -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) diff --git a/pkg/baremetal/tasks/prepare.go b/pkg/baremetal/tasks/prepare.go index 4f2057ae10..0486b64cb8 100644 --- a/pkg/baremetal/tasks/prepare.go +++ b/pkg/baremetal/tasks/prepare.go @@ -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()) diff --git a/pkg/baremetal/tasks/rebuild.go b/pkg/baremetal/tasks/rebuild.go index 5c666f64bf..d8b658a49a 100644 --- a/pkg/baremetal/tasks/rebuild.go +++ b/pkg/baremetal/tasks/rebuild.go @@ -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) diff --git a/pkg/baremetal/tasks/reprepare.go b/pkg/baremetal/tasks/reprepare.go index 61a2448d90..b3d065afbf 100644 --- a/pkg/baremetal/tasks/reprepare.go +++ b/pkg/baremetal/tasks/reprepare.go @@ -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 } diff --git a/pkg/baremetal/tasks/resetbmc.go b/pkg/baremetal/tasks/resetbmc.go index 9b9b96552f..e059c64768 100644 --- a/pkg/baremetal/tasks/resetbmc.go +++ b/pkg/baremetal/tasks/resetbmc.go @@ -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) diff --git a/pkg/baremetal/tasks/start.go b/pkg/baremetal/tasks/start.go index e8302d316e..e8014f5544 100644 --- a/pkg/baremetal/tasks/start.go +++ b/pkg/baremetal/tasks/start.go @@ -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) diff --git a/pkg/baremetal/tasks/stop.go b/pkg/baremetal/tasks/stop.go index 325e089997..365ea9b20d 100644 --- a/pkg/baremetal/tasks/stop.go +++ b/pkg/baremetal/tasks/stop.go @@ -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) diff --git a/pkg/baremetal/tasks/unmaintenance.go b/pkg/baremetal/tasks/unmaintenance.go index 45bc8f3a86..ec51e2d848 100644 --- a/pkg/baremetal/tasks/unmaintenance.go +++ b/pkg/baremetal/tasks/unmaintenance.go @@ -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) diff --git a/pkg/compute/tasks/baremetal_create_task.go b/pkg/compute/tasks/baremetal_create_task.go index e90f94f8a5..e9ea92e62d 100644 --- a/pkg/compute/tasks/baremetal_create_task.go +++ b/pkg/compute/tasks/baremetal_create_task.go @@ -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()) } diff --git a/pkg/util/logclient/consts.go b/pkg/util/logclient/consts.go index 3c23d89d4c..018c35e96a 100644 --- a/pkg/util/logclient/consts.go +++ b/pkg/util/logclient/consts.go @@ -171,4 +171,6 @@ const ( ACT_LOADBALANCER_DISSOCIATE = "解绑负载均衡" ACT_SUBIMAGE_UPDATE = "更新子镜像" + + ACT_PREPARE = "同步硬件配置" )