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
@@ -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
})
}
+11
View File
@@ -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
+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")
}
}
+1 -1
View File
@@ -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)
}
+2 -2
View File
@@ -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 {