mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 06:09:39 +08:00
Automatic merge from release/2.2.0 -> release/2.3.0
* commit 'fb84a9e5086f74418a1f2a2352b926ff4effd34a': add disk-create-snapshot, bug fix
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user