instance_backup_joint.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 models
  15. import (
  16. "context"
  17. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  18. "yunion.io/x/onecloud/pkg/mcclient"
  19. )
  20. func init() {
  21. db.InitManager(func() {
  22. InstanceBackupJointManager = &SInstanceBackupJointManager{
  23. SVirtualJointResourceBaseManager: db.NewVirtualJointResourceBaseManager(
  24. SInstanceBackupJoint{},
  25. "instancebackupjoints_tbl",
  26. "instancebackupjoint",
  27. "instancebackupjoints",
  28. InstanceBackupManager,
  29. DiskBackupManager,
  30. ),
  31. }
  32. InstanceBackupJointManager.SetVirtualObject(InstanceBackupJointManager)
  33. })
  34. }
  35. // +onecloud:swagger-gen-ignore
  36. type SInstanceBackupJoint struct {
  37. db.SVirtualJointResourceBase
  38. InstanceBackupId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required" index:"true"`
  39. DiskBackupId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required" index:"true"`
  40. DiskIndex int8 `nullable:"false" default:"0" list:"user" create:"required"`
  41. }
  42. // +onecloud:swagger-gen-ignore
  43. type SInstanceBackupJointManager struct {
  44. db.SVirtualJointResourceBaseManager
  45. }
  46. func (manager *SInstanceBackupJointManager) GetMasterFieldName() string {
  47. return "instance_backup_id"
  48. }
  49. func (manager *SInstanceBackupJointManager) GetSlaveFieldName() string {
  50. return "disk_backup_id"
  51. }
  52. var InstanceBackupJointManager *SInstanceBackupJointManager
  53. func (manager *SInstanceBackupJointManager) CreateJoint(ctx context.Context, instanceBackupId, backupId string, diskIndex int8) error {
  54. instanceBackupJoint := &SInstanceBackupJoint{}
  55. instanceBackupJoint.SetModelManager(manager, instanceBackupJoint)
  56. instanceBackupJoint.InstanceBackupId = instanceBackupId
  57. instanceBackupJoint.DiskBackupId = backupId
  58. instanceBackupJoint.DiskIndex = diskIndex
  59. return manager.TableSpec().Insert(ctx, instanceBackupJoint)
  60. }
  61. func (manager *SInstanceBackupJointManager) IsSubBackup(backupId string) (bool, error) {
  62. count, err := manager.Query().Equals("disk_backup_id", backupId).CountWithError()
  63. if err != nil {
  64. return false, err
  65. }
  66. return count > 0, nil
  67. }
  68. func (self *SInstanceBackupJoint) Detach(ctx context.Context, userCred mcclient.TokenCredential) error {
  69. return db.DetachJoint(ctx, userCred, self)
  70. }