snapshot.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package bingocloud
  2. import (
  3. "strconv"
  4. "time"
  5. "yunion.io/x/jsonutils"
  6. "yunion.io/x/cloudmux/pkg/cloudprovider"
  7. )
  8. type SSnapshot struct {
  9. region *SRegion
  10. SnapshotId string
  11. SnapshotName string
  12. BackupId string
  13. VolumeId string
  14. Status string
  15. StartTime string
  16. Progress string
  17. OwnerId string
  18. VolumeSize string
  19. Description string
  20. }
  21. func (self SSnapshot) GetId() string {
  22. return self.SnapshotId
  23. }
  24. func (self SSnapshot) GetName() string {
  25. return self.SnapshotName
  26. }
  27. func (self SSnapshot) GetGlobalId() string {
  28. return self.SnapshotId
  29. }
  30. func (self SSnapshot) GetCreatedAt() time.Time {
  31. ct, _ := time.Parse("2006-01-02T15:04:05.000Z", self.StartTime)
  32. return ct
  33. }
  34. func (self SSnapshot) GetDescription() string {
  35. return self.Description
  36. }
  37. func (self SSnapshot) GetStatus() string {
  38. return self.Status
  39. }
  40. func (self SSnapshot) Refresh() error {
  41. newSnapshot, err := self.region.getSnapshots(self.SnapshotId, "")
  42. if err != nil {
  43. return err
  44. }
  45. if len(newSnapshot) == 1 {
  46. return jsonutils.Update(self, &newSnapshot[0])
  47. }
  48. return cloudprovider.ErrNotFound
  49. }
  50. func (self SSnapshot) IsEmulated() bool {
  51. return false
  52. }
  53. func (self SSnapshot) GetSysTags() map[string]string {
  54. return nil
  55. }
  56. func (self SSnapshot) GetTags() (map[string]string, error) {
  57. return nil, nil
  58. }
  59. func (self SSnapshot) SetTags(tags map[string]string, replace bool) error {
  60. return nil
  61. }
  62. func (self SSnapshot) GetProjectId() string {
  63. return ""
  64. }
  65. func (self SSnapshot) GetSizeMb() int32 {
  66. size, _ := strconv.Atoi(self.VolumeSize)
  67. return int32(size * 1024)
  68. }
  69. func (self SSnapshot) GetDiskId() string {
  70. return self.VolumeId
  71. }
  72. func (self SSnapshot) GetDiskType() string {
  73. return ""
  74. }
  75. func (self SSnapshot) Delete() error {
  76. if self.BackupId != "" {
  77. return self.region.deleteInstanceBackup(self.BackupId)
  78. }
  79. return self.region.deleteSnapshot(self.SnapshotId)
  80. }
  81. func (self *SRegion) createSnapshot(volumeId, name string, desc string) (string, error) {
  82. params := map[string]string{}
  83. params["VolumeId"] = volumeId
  84. params["SnapshotName"] = name
  85. params["Description"] = desc
  86. resp, err := self.client.invoke("CreateSnapshot", params)
  87. if err != nil {
  88. return "", err
  89. }
  90. newId := ""
  91. err = resp.Unmarshal(&newId, "snapshotId")
  92. return newId, err
  93. }
  94. func (self *SRegion) getSnapshots(id, name string) ([]SSnapshot, error) {
  95. params := map[string]string{}
  96. if id != "" {
  97. params["SnapshotId.1"] = id
  98. }
  99. if name != "" {
  100. params["Filter.1.Name"] = name
  101. }
  102. resp, err := self.client.invoke("DescribeSnapshots", params)
  103. if err != nil {
  104. return nil, err
  105. }
  106. var ret []SSnapshot
  107. _ = resp.Unmarshal(&ret, "snapshotSet")
  108. return ret, err
  109. }
  110. func (self *SRegion) deleteSnapshot(id string) error {
  111. params := map[string]string{}
  112. params["SnapshotId"] = id
  113. _, err := self.client.invoke("DeleteSnapshot", params)
  114. return err
  115. }