mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +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:
@@ -225,4 +225,18 @@ func init() {
|
||||
printObject(disk)
|
||||
return nil
|
||||
})
|
||||
type DiskCreateSnapshotOptions struct {
|
||||
DISK string `help:"ID or name of disk"`
|
||||
SNAPSHOT_NAME string `help:"Snapshots name`
|
||||
}
|
||||
R(&DiskCreateSnapshotOptions{}, "disk-create-snapshot", "Disk create snapshot", func(s *mcclient.ClientSession, args *DiskCreateSnapshotOptions) error {
|
||||
params := jsonutils.NewDict()
|
||||
params.Add(jsonutils.NewString(args.SNAPSHOT_NAME), "name")
|
||||
disk, err := modules.Disks.PerformAction(s, args.DISK, "create-snapshot", params)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
printObject(disk)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ func init() {
|
||||
options.BaseListOptions
|
||||
Disk string `help:"Disk snapshots"`
|
||||
FakeDeleted bool `help:"Show fake deleted snapshot or not"`
|
||||
DiskType string `help: "Filter by disk type" choices:"sys|data"`
|
||||
Provider string `help: "Cloud provider" choices:"Aliyun|VMware|Azure"`
|
||||
}
|
||||
R(&SnapshotsListOptions{}, "snapshot-list", "Show snapshots", func(s *mcclient.ClientSession, args *SnapshotsListOptions) error {
|
||||
params, err := args.BaseListOptions.Params()
|
||||
@@ -22,6 +24,15 @@ func init() {
|
||||
params.Add(jsonutils.NewString(args.Disk), "disk_id")
|
||||
}
|
||||
params.Add(jsonutils.NewBool(args.FakeDeleted), "fake_deleted")
|
||||
if len(args.Disk) > 0 {
|
||||
params.Add(jsonutils.NewString(args.Disk), "disk_id")
|
||||
}
|
||||
if len(args.DiskType) > 0 {
|
||||
params.Add(jsonutils.NewString(args.DiskType), "disk_type")
|
||||
}
|
||||
if len(args.Provider) > 0 {
|
||||
params.Add(jsonutils.NewString(args.Provider), "provider")
|
||||
}
|
||||
result, err := modules.Snapshots.List(s, params)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ func init() {
|
||||
Snapshots = NewComputeManager("snapshot", "snapshots",
|
||||
[]string{"ID", "Name", "Size", "Status",
|
||||
"Disk_id", "Guest_id", "Created_at"},
|
||||
[]string{"Storage_id", "Create_by", "Location", "Out_of_chain", "disk_type", "provider"})
|
||||
[]string{"Storage_id", "Storage_type", "Create_by", "Location", "Out_of_chain", "disk_type", "provider"})
|
||||
|
||||
registerComputeV2(&Snapshots)
|
||||
}
|
||||
|
||||
@@ -256,8 +256,8 @@ type ServerSendKeyOptions struct {
|
||||
}
|
||||
|
||||
type ServerMonitorOptions struct {
|
||||
ID string `help:"ID or Name of server" json:"-"`
|
||||
CMD string `help:"Qemu Monitor command to send"`
|
||||
ID string `help:"ID or Name of server" json:"-"`
|
||||
COMMAND string `help:"Qemu Monitor command to send"`
|
||||
}
|
||||
|
||||
type ServerSaveImageOptions struct {
|
||||
|
||||
Reference in New Issue
Block a user