Automatic merge from release/2.2.0 -> release/2.3.0

* commit 'fb84a9e5086f74418a1f2a2352b926ff4effd34a':
  add disk-create-snapshot, bug fix
This commit is contained in:
邱剑
2018-10-16 13:55:19 +08:00
6 changed files with 58 additions and 4 deletions
+14
View File
@@ -410,6 +410,20 @@ func (self *SDisk) CleanUpDiskSnapshots(ctx context.Context, userCred mcclient.T
return nil
}
func (self *SDisk) AllowPerformCreateSnapshot(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
return self.IsOwner(userCred)
}
func (self *SDisk) PerformCreateSnapshot(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
guests := self.GetGuests()
if len(guests) != 1 {
return nil, httperrors.NewBadRequestError("Disk dosen't attach guest??")
}
dataDict := data.(*jsonutils.JSONDict)
dataDict.Set("disk_id", jsonutils.NewString(self.Id))
return guests[0].PerformDiskSnapshot(ctx, userCred, query, dataDict)
}
func (self *SDisk) AllowPerformDiskReset(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
return self.IsOwner(userCred)
}
+16 -1
View File
@@ -86,6 +86,18 @@ func (manager *SSnapshotManager) ListItemFilter(ctx context.Context, q *sqlchemy
} else {
q = q.Equals("fake_deleted", false)
}
if diskType, err := query.GetString("disk_type"); err == nil {
diskTbl := DiskManager.Query().SubQuery()
sq := diskTbl.Query(diskTbl.Field("id")).Equals("disk_type", diskType).SubQuery()
q = q.In("disk_id", sq)
}
if provider, err := query.GetString("provider"); err == nil {
cloudproviderTbl := CloudproviderManager.Query().SubQuery()
sq := cloudproviderTbl.Query(cloudproviderTbl.Field("id")).Equals("provider", provider)
q = q.In("manager_id", sq)
}
return q, nil
}
@@ -103,9 +115,12 @@ func (self *SSnapshot) getMoreDetails(extra *jsonutils.JSONDict) *jsonutils.JSON
disk, _ := self.GetDisk()
if disk != nil {
extra.Add(jsonutils.NewString(disk.DiskType), "disk_type")
if storage := disk.GetStorage(); storage != nil {
extra.Add(jsonutils.NewString(storage.StorageType), "storage_type")
}
guests := disk.GetGuests()
if len(guests) == 1 {
extra.Add(jsonutils.NewString(guests[0].Id), "guest")
extra.Add(jsonutils.NewString(guests[0].Name), "guest")
extra.Add(jsonutils.NewString(guests[0].Status), "guest_status")
}
}