maintenance.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package tasks
  15. import (
  16. "context"
  17. "yunion.io/x/jsonutils"
  18. "yunion.io/x/onecloud/pkg/mcclient"
  19. "yunion.io/x/onecloud/pkg/util/ssh"
  20. )
  21. type SBaremetalMaintenanceTask struct {
  22. SBaremetalPXEBootTaskBase
  23. }
  24. func NewBaremetalMaintenanceTask(
  25. userCred mcclient.TokenCredential,
  26. baremetal IBaremetal,
  27. taskId string,
  28. data jsonutils.JSONObject,
  29. ) ITask {
  30. task := &SBaremetalMaintenanceTask{
  31. SBaremetalPXEBootTaskBase: newBaremetalPXEBootTaskBase(userCred, baremetal, taskId, data),
  32. }
  33. task.SetVirtualObject(task)
  34. task.SetStage(task.InitPXEBootTask)
  35. return task
  36. }
  37. func (self *SBaremetalMaintenanceTask) OnPXEBoot(ctx context.Context, term *ssh.Client, args interface{}) error {
  38. sshConfig := term.GetConfig()
  39. dataObj := map[string]interface{}{
  40. "username": sshConfig.Username,
  41. "password": sshConfig.Password,
  42. "ip": sshConfig.Host,
  43. }
  44. if jsonutils.QueryBoolean(self.data, "guest_running", false) {
  45. dataObj["guest_running"] = true
  46. }
  47. self.Baremetal.AutoSyncStatus(ctx)
  48. SetTaskComplete(self, jsonutils.Marshal(dataObj))
  49. return nil
  50. }