baremetal.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 hostdrivers
  15. import (
  16. "context"
  17. "fmt"
  18. "yunion.io/x/jsonutils"
  19. "yunion.io/x/pkg/errors"
  20. api "yunion.io/x/onecloud/pkg/apis/compute"
  21. "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
  22. "yunion.io/x/onecloud/pkg/compute/models"
  23. "yunion.io/x/onecloud/pkg/mcclient"
  24. )
  25. type SBaremetalHostDriver struct {
  26. SBaseHostDriver
  27. }
  28. func init() {
  29. driver := SBaremetalHostDriver{}
  30. models.RegisterHostDriver(&driver)
  31. }
  32. func (self *SBaremetalHostDriver) GetHostType() string {
  33. return api.HOST_TYPE_BAREMETAL
  34. }
  35. func (self *SBaremetalHostDriver) GetHypervisor() string {
  36. return api.HYPERVISOR_BAREMETAL
  37. }
  38. func (self *SBaremetalHostDriver) GetProvider() string {
  39. return api.CLOUD_PROVIDER_ONECLOUD
  40. }
  41. func (self *SBaremetalHostDriver) RequestBaremetalUnmaintence(ctx context.Context, userCred mcclient.TokenCredential, baremetal *models.SHost, task taskman.ITask) error {
  42. url := fmt.Sprintf("/baremetals/%s/unmaintenance", baremetal.Id)
  43. headers := task.GetTaskRequestHeader()
  44. _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, task.GetParams())
  45. return err
  46. }
  47. func (self *SBaremetalHostDriver) RequestBaremetalMaintence(ctx context.Context, userCred mcclient.TokenCredential, baremetal *models.SHost, task taskman.ITask) error {
  48. url := fmt.Sprintf("/baremetals/%s/maintenance", baremetal.Id)
  49. headers := task.GetTaskRequestHeader()
  50. _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, task.GetParams())
  51. return err
  52. }
  53. func (self *SBaremetalHostDriver) RequestSyncBaremetalHostStatus(ctx context.Context, userCred mcclient.TokenCredential, baremetal *models.SHost, task taskman.ITask) error {
  54. url := fmt.Sprintf("/baremetals/%s/syncstatus", baremetal.Id)
  55. headers := task.GetTaskRequestHeader()
  56. _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil)
  57. return err
  58. }
  59. func (self *SBaremetalHostDriver) RequestSyncBaremetalHostConfig(ctx context.Context, userCred mcclient.TokenCredential, baremetal *models.SHost, task taskman.ITask) error {
  60. url := fmt.Sprintf("/baremetals/%s/sync-config", baremetal.Id)
  61. headers := task.GetTaskRequestHeader()
  62. _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil)
  63. return err
  64. }
  65. func (self *SBaremetalHostDriver) IsDisableImageCache(host *models.SHost) (bool, error) {
  66. agent := host.GetAgent(api.AgentTypeBaremetal)
  67. if agent == nil {
  68. return false, errors.Wrapf(errors.ErrNotFound, "get host %s(%s) agent", host.GetName(), host.GetId())
  69. }
  70. return agent.DisableImageCache, nil
  71. }
  72. func (self *SBaremetalHostDriver) CheckAndSetCacheImage(ctx context.Context, userCred mcclient.TokenCredential, host *models.SHost, storageCache *models.SStoragecache, task taskman.ITask) error {
  73. input := api.CacheImageInput{}
  74. task.GetParams().Unmarshal(&input)
  75. _, err := models.CachedimageManager.FetchById(input.ImageId)
  76. if err != nil {
  77. return errors.Wrapf(err, "fetch cachedimage by image_id %s", input.ImageId)
  78. }
  79. disableCache, err := self.IsDisableImageCache(host)
  80. if err != nil {
  81. return errors.Wrapf(err, "check disable image cache by host %s(%s)", host.GetName(), host.GetId())
  82. }
  83. // iso must be cached to use
  84. if disableCache && input.Format != "iso" {
  85. task.ScheduleRun(nil)
  86. return nil
  87. }
  88. url := "/disks/image_cache"
  89. body := jsonutils.NewDict()
  90. body.Add(jsonutils.Marshal(&input), "disk")
  91. header := task.GetTaskRequestHeader()
  92. _, err = host.BaremetalSyncRequest(ctx, "POST", url, header, body)
  93. if err != nil {
  94. return err
  95. }
  96. return nil
  97. }
  98. func (self *SBaremetalHostDriver) RequestAllocateDiskOnStorage(ctx context.Context, userCred mcclient.TokenCredential, host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, input api.DiskAllocateInput) error {
  99. return fmt.Errorf("not supported")
  100. }
  101. func (self *SBaremetalHostDriver) RequestDeallocateDiskOnHost(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, cleanSnapshots bool, task taskman.ITask) error {
  102. return fmt.Errorf("not supported")
  103. }
  104. func (self *SBaremetalHostDriver) RequestPrepareSaveDiskOnHost(ctx context.Context, host *models.SHost, disk *models.SDisk, imageId string, task taskman.ITask) error {
  105. return fmt.Errorf("not supported")
  106. }
  107. func (self *SBaremetalHostDriver) RequestRebuildDiskOnStorage(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, input api.DiskAllocateInput) error {
  108. return fmt.Errorf("not supported")
  109. }
  110. func (self *SBaremetalHostDriver) RequestResizeDiskOnHost(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, sizeMb int64, task taskman.ITask) error {
  111. return fmt.Errorf("not supported")
  112. }
  113. func (self *SBaremetalHostDriver) RequestSaveUploadImageOnHost(ctx context.Context, host *models.SHost, disk *models.SDisk, imageId string, task taskman.ITask, data jsonutils.JSONObject) error {
  114. return fmt.Errorf("not supported")
  115. }
  116. func (self *SBaremetalHostDriver) RequestUncacheImage(ctx context.Context, host *models.SHost, storageCache *models.SStoragecache, task taskman.ITask, deactivateImage bool) error {
  117. return fmt.Errorf("not supported")
  118. }