From 6546056fbfe7fb4e0456cc7c0b3c63fa57c1903d Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Wed, 15 May 2024 18:03:39 +0800 Subject: [PATCH] fix: hostbackupstorage climc subcmds (#20286) Co-authored-by: Qiu Jian --- cmd/climc/shell/compute/backup.go | 6 +++ cmd/climc/shell/helper.go | 57 ++++++++++++++++++++++++-- pkg/mcclient/options/compute/backup.go | 35 ++++++++++++++++ 3 files changed, 95 insertions(+), 3 deletions(-) diff --git a/cmd/climc/shell/compute/backup.go b/cmd/climc/shell/compute/backup.go index 29d677c76c..3c340ea894 100644 --- a/cmd/climc/shell/compute/backup.go +++ b/cmd/climc/shell/compute/backup.go @@ -50,4 +50,10 @@ func init() { ibCmd.Create(&compute.InstanceBackupManagerCreateFromPackageOptions{}) ibCmd.Perform("syncstatus", &compute.DiskBackupSyncstatusOptions{}) ibCmd.Perform("set-class-metadata", &options.ResourceMetadataOptions{}) + + hbsCmd := shell.NewJointCmd(&modules.HostBackupstorages) + hbsCmd.List(&compute.HostBackupStorageListOptions{}) + hbsCmd.Show(&compute.HostBackupStorageJoinOptions{}) + hbsCmd.Attach(&compute.HostBackupStorageJoinOptions{}) + hbsCmd.Detach(&compute.HostBackupStorageJoinOptions{}) } diff --git a/cmd/climc/shell/helper.go b/cmd/climc/shell/helper.go index 258402f60a..adf152709b 100644 --- a/cmd/climc/shell/helper.go +++ b/cmd/climc/shell/helper.go @@ -667,15 +667,15 @@ func (cmd JointCmd) List(args IJointListOpt) { cmd.RunWithDesc("list", fmt.Sprintf("list %s %s pairs", man.MasterManager().KeyString(), man.SlaveManager().KeyString()), args, callback) } -type IJointShowOpt interface { +type IJointOpt interface { IOpt GetMasterId() string GetSlaveId() string } -func (cmd JointCmd) Show(args IJointShowOpt) { +func (cmd JointCmd) Show(args IJointOpt) { man := cmd.manager.(modulebase.JointManager) - callback := func(s *mcclient.ClientSession, args IJointShowOpt) error { + callback := func(s *mcclient.ClientSession, args IJointOpt) error { params, err := args.Params() if err != nil { return err @@ -689,3 +689,54 @@ func (cmd JointCmd) Show(args IJointShowOpt) { } cmd.Run("show", args, callback) } + +func (cmd JointCmd) Attach(args IJointOpt) { + man := cmd.manager.(modulebase.JointManager) + callback := func(s *mcclient.ClientSession, args IJointOpt) error { + params, err := args.Params() + if err != nil { + return err + } + result, err := man.Attach(s, args.GetMasterId(), args.GetSlaveId(), params) + if err != nil { + return err + } + PrintObject(result) + return nil + } + cmd.Run("attach", args, callback) +} + +func (cmd JointCmd) Detach(args IJointOpt) { + man := cmd.manager.(modulebase.JointManager) + callback := func(s *mcclient.ClientSession, args IJointOpt) error { + params, err := args.Params() + if err != nil { + return err + } + result, err := man.Detach(s, args.GetMasterId(), args.GetSlaveId(), params) + if err != nil { + return err + } + PrintObject(result) + return nil + } + cmd.Run("detach", args, callback) +} + +func (cmd JointCmd) Update(args IJointOpt) { + man := cmd.manager.(modulebase.JointManager) + callback := func(s *mcclient.ClientSession, args IJointOpt) error { + params, err := args.Params() + if err != nil { + return err + } + result, err := man.Update(s, args.GetMasterId(), args.GetSlaveId(), nil, params) + if err != nil { + return err + } + PrintObject(result) + return nil + } + cmd.Run("update", args, callback) +} diff --git a/pkg/mcclient/options/compute/backup.go b/pkg/mcclient/options/compute/backup.go index b5def5b986..2f9c023e0a 100644 --- a/pkg/mcclient/options/compute/backup.go +++ b/pkg/mcclient/options/compute/backup.go @@ -206,3 +206,38 @@ type InstanceBackupManagerCreateFromPackageOptions struct { func (opts *InstanceBackupManagerCreateFromPackageOptions) Params() (jsonutils.JSONObject, error) { return jsonutils.Marshal(opts), nil } + +type HostBackupStorageListOptions struct { + options.BaseListOptions + Host string `json:"-" help:"filter by host"` + Backupstorage string `json:"-" help:"filter by backupstorage"` +} + +func (opts HostBackupStorageListOptions) GetMasterOpt() string { + return opts.Host +} + +func (opts HostBackupStorageListOptions) GetSlaveOpt() string { + return opts.Backupstorage +} + +func (opts *HostBackupStorageListOptions) Params() (jsonutils.JSONObject, error) { + return options.ListStructToParams(opts) +} + +type HostBackupStorageJoinOptions struct { + HOST string `json:"-" help:"host id"` + BACKUPSTORAGE string `json:"-" help:"backup storage id"` +} + +func (opts HostBackupStorageJoinOptions) GetMasterId() string { + return opts.HOST +} + +func (opts HostBackupStorageJoinOptions) GetSlaveId() string { + return opts.BACKUPSTORAGE +} + +func (opts HostBackupStorageJoinOptions) Params() (jsonutils.JSONObject, error) { + return jsonutils.NewDict(), nil +}