diff --git a/cmd/climc/shell/events/events.go b/cmd/climc/shell/events/events.go index 681f7112d0..5e9991b76f 100644 --- a/cmd/climc/shell/events/events.go +++ b/cmd/climc/shell/events/events.go @@ -20,7 +20,6 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modulebase" "yunion.io/x/onecloud/pkg/mcclient/modules" - "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" ) type BaseEventListOptions struct { @@ -54,23 +53,19 @@ type TypeEventListOptions struct { ID string `help:"" metavar:"OBJ_ID"` } -func doK8sEventList(s *mcclient.ClientSession, args *EventListOptions) error { - return doEventList(*k8s.Logs.ResourceManager, s, args) -} - func doComputeEventList(s *mcclient.ClientSession, args *EventListOptions) error { - return doEventList(modules.Logs, s, args) + return DoEventList(modules.Logs, s, args) } func doImageEventList(s *mcclient.ClientSession, args *EventListOptions) error { - return doEventList(modules.ImageLogs, s, args) + return DoEventList(modules.ImageLogs, s, args) } func doIdentityEventList(s *mcclient.ClientSession, args *EventListOptions) error { - return doEventList(modules.IdentityLogs, s, args) + return DoEventList(modules.IdentityLogs, s, args) } -func doEventList(man modulebase.ResourceManager, s *mcclient.ClientSession, args *EventListOptions) error { +func DoEventList(man modulebase.ResourceManager, s *mcclient.ClientSession, args *EventListOptions) error { params := jsonutils.NewDict() if len(args.Type) > 0 { params.Add(jsonutils.NewStringArray(args.Type), "obj_type") @@ -190,16 +185,6 @@ func init() { return doComputeEventList(s, &nargs) }) - R(&TypeEventListOptions{}, "kubecluster-event", "Show operation event logs of kubernetes cluster", func(s *mcclient.ClientSession, args *TypeEventListOptions) error { - nargs := EventListOptions{BaseEventListOptions: args.BaseEventListOptions, Id: args.ID, Type: []string{"kubecluster"}} - return doK8sEventList(s, &nargs) - }) - - R(&TypeEventListOptions{}, "kubemachine-event", "Show operation event logs of kubernetes machine", func(s *mcclient.ClientSession, args *TypeEventListOptions) error { - nargs := EventListOptions{BaseEventListOptions: args.BaseEventListOptions, Id: args.ID, Type: []string{"kubemachine"}} - return doK8sEventList(s, &nargs) - }) - R(&TypeEventListOptions{}, "image-event", "Show operation event logs of glance images", func(s *mcclient.ClientSession, args *TypeEventListOptions) error { nargs := EventListOptions{BaseEventListOptions: args.BaseEventListOptions, Id: args.ID, Type: []string{"image"}} return doImageEventList(s, &nargs) diff --git a/cmd/climc/shell/helper.go b/cmd/climc/shell/helper.go index 571a4d285e..4c9a70c56e 100644 --- a/cmd/climc/shell/helper.go +++ b/cmd/climc/shell/helper.go @@ -78,7 +78,7 @@ type ICreateOpt interface { IOpt } -func (cmd ResourceCmd) runWithDesc(action, desc string, args interface{}, callback interface{}) { +func (cmd ResourceCmd) RunWithDesc(action, desc string, args interface{}, callback interface{}) { man := cmd.manager prefix := cmd.prefix if prefix != "" { @@ -98,8 +98,8 @@ func (cmd ResourceCmd) runWithDesc(action, desc string, args interface{}, callba R(args, fmt.Sprintf("%s%s-%s", prefix, cmd.keyword, action), desc, callback) } -func (cmd ResourceCmd) run(action string, args interface{}, callback interface{}) { - cmd.runWithDesc(action, "", args, callback) +func (cmd ResourceCmd) Run(action string, args interface{}, callback interface{}) { + cmd.RunWithDesc(action, "", args, callback) } func (cmd ResourceCmd) List(args IListOpt) { @@ -130,7 +130,7 @@ func (cmd ResourceCmd) List(args IListOpt) { printList(result, man.GetColumns(s)) return nil } - cmd.run("list", args, callback) + cmd.Run("list", args, callback) } func (cmd ResourceCmd) Create(args ICreateOpt) { @@ -147,7 +147,7 @@ func (cmd ResourceCmd) Create(args ICreateOpt) { printObject(ret) return nil } - cmd.run("create", args, callback) + cmd.Run("create", args, callback) } type IIdOpt interface { @@ -177,7 +177,7 @@ func (cmd ResourceCmd) Show(args IShowOpt) { printObject(ret) return nil } - cmd.runWithDesc("show", fmt.Sprintf("Show details of a %s", man.GetKeyword()), args, callback) + cmd.RunWithDesc("show", fmt.Sprintf("Show details of a %s", man.GetKeyword()), args, callback) } func (cmd ResourceCmd) ClassShow(args IShowOpt) { @@ -194,7 +194,7 @@ func (cmd ResourceCmd) ClassShow(args IShowOpt) { printObject(ret) return nil } - cmd.runWithDesc(args.GetId(), fmt.Sprintf("Show %s of a %s", args.GetId(), man.GetKeyword()), args, callback) + cmd.RunWithDesc(args.GetId(), fmt.Sprintf("Show %s of a %s", args.GetId(), man.GetKeyword()), args, callback) } type IGetActionOpt interface { @@ -247,7 +247,7 @@ func (cmd ResourceCmd) Custom(action TCustomAction, funcname string, args IGetAc } return nil } - cmd.runWithDesc(funcname, fmt.Sprintf("Get %s of a %s", funcname, man.GetKeyword()), args, callback) + cmd.RunWithDesc(funcname, fmt.Sprintf("Get %s of a %s", funcname, man.GetKeyword()), args, callback) } type IDeleteOpt interface { @@ -269,7 +269,7 @@ func (cmd ResourceCmd) Delete(args IDeleteOpt) { printObject(ret) return nil } - cmd.runWithDesc("delete", fmt.Sprintf("Delete %s", man.GetKeyword()), args, callback) + cmd.RunWithDesc("delete", fmt.Sprintf("Delete %s", man.GetKeyword()), args, callback) } type IWithDescOpt interface { @@ -295,7 +295,7 @@ func (cmd ResourceCmd) Perform(action string, args IPerformOpt) { printObject(ret) return nil } - cmd.run(action, args, callback) + cmd.Run(action, args, callback) } func (cmd ResourceCmd) PerformClass(action string, args IOpt) { @@ -312,7 +312,7 @@ func (cmd ResourceCmd) PerformClass(action string, args IOpt) { printObject(ret) return nil } - cmd.run(action, args, callback) + cmd.Run(action, args, callback) } type IBatchPerformOpt interface { @@ -331,7 +331,7 @@ func (cmd ResourceCmd) BatchPerform(action string, args IBatchPerformOpt) { printBatchResults(ret, man.GetColumns(s)) return nil } - cmd.run(action, args, callback) + cmd.Run(action, args, callback) } type IGetOpt interface { @@ -353,7 +353,7 @@ func (cmd ResourceCmd) Get(specific string, args IGetOpt) { printObject(ret) return nil } - cmd.runWithDesc(specific, fmt.Sprintf("Get %s of a %s", specific, man.GetKeyword()), args, callback) + cmd.RunWithDesc(specific, fmt.Sprintf("Get %s of a %s", specific, man.GetKeyword()), args, callback) } type IUpdateOpt interface { @@ -375,7 +375,7 @@ func (cmd ResourceCmd) Update(args IUpdateOpt) { printObject(ret) return nil } - cmd.run("update", args, callback) + cmd.Run("update", args, callback) } type IMetadataOpt interface { @@ -397,7 +397,7 @@ func (cmd ResourceCmd) GetMetadata(args IMetadataOpt) { printObject(ret) return nil } - cmd.runWithDesc("metadata", fmt.Sprintf("Show metadata of a %s", man.GetKeyword()), args, callback) + cmd.RunWithDesc("metadata", fmt.Sprintf("Show metadata of a %s", man.GetKeyword()), args, callback) } type IBatchDeleteOpt interface { @@ -416,7 +416,7 @@ func (cmd ResourceCmd) BatchDelete(args IBatchDeleteOpt) { printBatchResults(ret, man.GetColumns(s)) return nil } - cmd.run("delete", args, callback) + cmd.Run("delete", args, callback) } type IBatchDeleteWithParamOpt interface { @@ -439,7 +439,7 @@ func (cmd ResourceCmd) BatchDeleteWithParam(args IBatchDeleteWithParamOpt) { printBatchResults(ret, man.GetColumns(s)) return nil } - cmd.run("delete", args, callback) + cmd.Run("delete", args, callback) } type IBatchPutOpt interface { @@ -458,7 +458,7 @@ func (cmd ResourceCmd) BatchPut(args IBatchPutOpt) { printBatchResults(ret, man.GetColumns(s)) return nil } - cmd.run("update", args, callback) + cmd.Run("update", args, callback) } type JointCmd struct { @@ -498,7 +498,7 @@ func (cmd JointCmd) List(args IJointListOpt) { printList(result, man.GetColumns(s)) return nil } - cmd.runWithDesc("list", fmt.Sprintf("list %s %s pairs", man.MasterManager().KeyString(), man.SlaveManager().KeyString()), args, callback) + cmd.RunWithDesc("list", fmt.Sprintf("list %s %s pairs", man.MasterManager().KeyString(), man.SlaveManager().KeyString()), args, callback) } type IJointShowOpt interface { @@ -521,5 +521,5 @@ func (cmd JointCmd) Show(args IJointShowOpt) { printObject(result) return nil } - cmd.run("show", args, callback) + cmd.Run("show", args, callback) } diff --git a/cmd/climc/shell/k8s/certs.go b/cmd/climc/shell/k8s/certs.go index af4097ec6d..5c0a5b0a83 100644 --- a/cmd/climc/shell/k8s/certs.go +++ b/cmd/climc/shell/k8s/certs.go @@ -15,27 +15,11 @@ package k8s import ( - "fmt" - - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initKubeCerts() { - cmdN := func(action string) string { - return fmt.Sprintf("kubecert-%s", action) - } - R(&o.CertListOptions{}, cmdN("list"), "List k8s cluster certificates key pairs", func(s *mcclient.ClientSession, args *o.CertListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.KubeCerts.List(s, params) - if err != nil { - return err - } - printList(ret, k8s.KubeCerts.GetColumns(s)) - return nil - }) + cmd := NewK8sResourceCmd(k8s.KubeCerts) + cmd.List(new(o.CertListOptions)) } diff --git a/cmd/climc/shell/k8s/clusters.go b/cmd/climc/shell/k8s/clusters.go index 795696217f..634c15c656 100644 --- a/cmd/climc/shell/k8s/clusters.go +++ b/cmd/climc/shell/k8s/clusters.go @@ -28,13 +28,22 @@ func initKubeCluster() { cmdN := func(action string) string { return fmt.Sprintf("k8s-cluster-%s", action) } - cmd := NewK8sResourceCmd(k8s.KubeClusters).SetKeyword("cluster") + cmd := NewK8sResourceCmd(k8s.KubeClusters) + cmd.SetKeyword("cluster") + cmd.ShowEvent() cmd.List(new(o.ClusterListOptions)) cmd.Show(new(o.IdentOptions)) cmd.Create(new(o.KubeClusterCreateOptions)) + cmd.Perform("sync", new(o.ClusterSyncOptions)) + cmd.Perform("syncstatus", new(o.IdentOptions)) + cmd.Get("components-status", new(o.IdentOptions)) cmd.Get("api-resources", new(o.IdentOptions)) cmd.Get("cluster-users", new(o.IdentOptions)) cmd.Get("cluster-user-groups", new(o.IdentOptions)) + cmd.Perform("purge", new(o.ClusterPurgeOptions)) + cmd.Perform("delete-machines", new(o.KubeClusterDeleteMachinesOptions)) + cmd.Perform("add-machines", new(o.KubeClusterAddMachinesOptions)) + cmd.PerformClass("gc", new(o.ClusterGCOpts)) R(&o.KubeClusterImportOptions{}, cmdN("import"), "Import k8s cluster", func(s *mcclient.ClientSession, args *o.KubeClusterImportOptions) error { params, err := args.Params() @@ -55,41 +64,6 @@ func initKubeCluster() { return nil }) - R(&o.KubeClusterAddMachinesOptions{}, cmdN("add-machines"), "Add machines to cluster", func(s *mcclient.ClientSession, args *o.KubeClusterAddMachinesOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "add-machines", params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&o.KubeClusterDeleteMachinesOptions{}, cmdN("delete-machines"), "Delete machines in cluster", func(s *mcclient.ClientSession, args *o.KubeClusterDeleteMachinesOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "delete-machines", params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&o.IdentOptions{}, cmdN("terminate"), "Terminate cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error { - ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "terminate", nil) - if err != nil { - return err - } - printObject(ret) - return nil - }) - R(&o.IdentOptions{}, cmdN("kubeconfig"), "Generate kubeconfig of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error { ret, err := k8s.KubeClusters.GetSpecific(s, args.ID, "kubeconfig", nil) if err != nil { @@ -156,37 +130,6 @@ func initKubeCluster() { return nil }) - R(&o.IdentOptions{}, cmdN("syncstatus"), "Sync cluster status", func(s *mcclient.ClientSession, args *o.IdentOptions) error { - ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "syncstatus", nil) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&o.ClusterSyncOptions{}, cmdN("sync"), "Sync cluster k8s resources", func(s *mcclient.ClientSession, args *o.ClusterSyncOptions) error { - param, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "sync", param) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&o.IdentOptions{}, cmdN("components-status"), "Get cluster component status", func(s *mcclient.ClientSession, args *o.IdentOptions) error { - ret, err := k8s.KubeClusters.GetSpecific(s, args.ID, "components-status", nil) - if err != nil { - return err - } - printObject(ret) - return nil - }) - R(&o.ClusterComponentTypeOptions{}, cmdN("component-setting"), "Get cluster component setting", func(s *mcclient.ClientSession, args *o.ClusterComponentTypeOptions) error { q := jsonutils.NewDict() q.Add(jsonutils.NewString(args.TYPE), "type") diff --git a/cmd/climc/shell/k8s/cronjob.go b/cmd/climc/shell/k8s/cronjob.go index ff694d4c91..e8f0562482 100644 --- a/cmd/climc/shell/k8s/cronjob.go +++ b/cmd/climc/shell/k8s/cronjob.go @@ -15,30 +15,11 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initCronJob() { cmd := initK8sNamespaceResource("cronjob", k8s.CronJobs) - cmdN := cmd.CommandNameFactory - createCmd := NewCommand( - &o.CronJobCreateOptions{}, - cmdN("create"), - "Create cronjob resource", - func(s *mcclient.ClientSession, args *o.CronJobCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.CronJobs.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - cmd.AddR(createCmd) + cmd.Create(new(o.CronJobCreateOptions)) } diff --git a/cmd/climc/shell/k8s/deployment.go b/cmd/climc/shell/k8s/deployment.go index fb9cad954a..aec4023a3b 100644 --- a/cmd/climc/shell/k8s/deployment.go +++ b/cmd/climc/shell/k8s/deployment.go @@ -15,48 +15,12 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initDeployment() { cmd := initK8sNamespaceResource("deployment", k8s.Deployments) - cmdN := cmd.CommandNameFactory - - createCmd := NewCommand( - &o.DeploymentCreateOptions{}, - cmdN("create"), - "Create deployment resource", - func(s *mcclient.ClientSession, args *o.DeploymentCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Deployments.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - updateCmd := NewCommand( - &o.DeploymentUpdateOptions{}, - cmdN("update"), - "Update deployment resource", - func(s *mcclient.ClientSession, args *o.DeploymentUpdateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Deployments.Update(s, args.NAME, params) - if err != nil { - return err - } - printObjectYAML(ret) - return nil - }) - - cmd.AddR(createCmd, updateCmd) + cmd.Create(new(o.DeploymentCreateOptions)) + cmd.Update(new(o.DeploymentUpdateOptions)) } diff --git a/cmd/climc/shell/k8s/fed_clusterrole.go b/cmd/climc/shell/k8s/fed_clusterrole.go index f5b2067740..b042e46529 100644 --- a/cmd/climc/shell/k8s/fed_clusterrole.go +++ b/cmd/climc/shell/k8s/fed_clusterrole.go @@ -27,7 +27,8 @@ func init() { Delete(new(options.IdentOptions)). AttachCluster(new(options.FedResourceJointClusterAttachOptions)). DetachCluster(new(options.FedResourceJointClusterDetachOptions)). - SyncCluster(new(options.FedResourceJointClusterDetachOptions)) + SyncCluster(new(options.FedResourceJointClusterDetachOptions)). + ShowEvent() cmd.ClassShow(new(options.FedApiResourecesOptions)) cmd.ClassShow(new(options.FedClusterUsersOptions)) diff --git a/cmd/climc/shell/k8s/fed_helper.go b/cmd/climc/shell/k8s/fed_helper.go index 80608127e9..1c2feaba4d 100644 --- a/cmd/climc/shell/k8s/fed_helper.go +++ b/cmd/climc/shell/k8s/fed_helper.go @@ -20,47 +20,47 @@ import ( ) type fedResourceCmd struct { - *shell.ResourceCmd + *K8sResourceCmd } func newFedResourceCmd(manager modulebase.IBaseManager) *fedResourceCmd { cmd := NewK8sResourceCmd(manager) return &fedResourceCmd{ - ResourceCmd: cmd, + K8sResourceCmd: cmd, } } func (c *fedResourceCmd) List(args shell.IListOpt) *fedResourceCmd { - c.ResourceCmd.List(args) + c.K8sResourceCmd.List(args) return c } func (c *fedResourceCmd) Show(args shell.IShowOpt) *fedResourceCmd { - c.ResourceCmd.Show(args) + c.K8sResourceCmd.Show(args) return c } func (c *fedResourceCmd) Create(args shell.ICreateOpt) *fedResourceCmd { - c.ResourceCmd.Create(args) + c.K8sResourceCmd.Create(args) return c } func (c *fedResourceCmd) Delete(args shell.IDeleteOpt) *fedResourceCmd { - c.ResourceCmd.Delete(args) + c.K8sResourceCmd.Delete(args) return c } func (c *fedResourceCmd) AttachCluster(args shell.IPerformOpt) *fedResourceCmd { - c.ResourceCmd.Perform("attach-cluster", args) + c.K8sResourceCmd.Perform("attach-cluster", args) return c } func (c *fedResourceCmd) DetachCluster(args shell.IPerformOpt) *fedResourceCmd { - c.ResourceCmd.Perform("detach-cluster", args) + c.K8sResourceCmd.Perform("detach-cluster", args) return c } func (c *fedResourceCmd) SyncCluster(args shell.IPerformOpt) *fedResourceCmd { - c.ResourceCmd.Perform("sync-cluster", args) + c.K8sResourceCmd.Perform("sync-cluster", args) return c } diff --git a/cmd/climc/shell/k8s/fed_namespace.go b/cmd/climc/shell/k8s/fed_namespace.go index b4898b90b0..bc1dc4a253 100644 --- a/cmd/climc/shell/k8s/fed_namespace.go +++ b/cmd/climc/shell/k8s/fed_namespace.go @@ -28,5 +28,6 @@ func init() { Delete(new(options.IdentOptions)). AttachCluster(new(options.FedResourceJointClusterAttachOptions)). DetachCluster(new(options.FedResourceJointClusterDetachOptions)). - SyncCluster(new(options.FedResourceJointClusterDetachOptions)) + SyncCluster(new(options.FedResourceJointClusterDetachOptions)). + ShowEvent() } diff --git a/cmd/climc/shell/k8s/fed_role.go b/cmd/climc/shell/k8s/fed_role.go index 24497f324f..66cb828800 100644 --- a/cmd/climc/shell/k8s/fed_role.go +++ b/cmd/climc/shell/k8s/fed_role.go @@ -27,7 +27,8 @@ func init() { Delete(new(options.IdentOptions)). AttachCluster(new(options.FedResourceJointClusterAttachOptions)). DetachCluster(new(options.FedResourceJointClusterDetachOptions)). - SyncCluster(new(options.FedResourceJointClusterDetachOptions)) + SyncCluster(new(options.FedResourceJointClusterDetachOptions)). + ShowEvent() cmd.ClassShow(new(options.FedApiResourecesOptions)) cmd.ClassShow(new(options.FedClusterUsersOptions)) diff --git a/cmd/climc/shell/k8s/fed_rolebinding.go b/cmd/climc/shell/k8s/fed_rolebinding.go index 08d6722424..ad02c9df78 100644 --- a/cmd/climc/shell/k8s/fed_rolebinding.go +++ b/cmd/climc/shell/k8s/fed_rolebinding.go @@ -28,5 +28,6 @@ func init() { Delete(new(options.IdentOptions)). AttachCluster(new(options.FedResourceJointClusterAttachOptions)). DetachCluster(new(options.FedResourceJointClusterDetachOptions)). - SyncCluster(new(options.FedResourceJointClusterDetachOptions)) + SyncCluster(new(options.FedResourceJointClusterDetachOptions)). + ShowEvent() } diff --git a/cmd/climc/shell/k8s/helper.go b/cmd/climc/shell/k8s/helper.go index a52ac76556..e91fc0b374 100644 --- a/cmd/climc/shell/k8s/helper.go +++ b/cmd/climc/shell/k8s/helper.go @@ -15,12 +15,118 @@ package k8s import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + + "github.com/ghodss/yaml" + + "yunion.io/x/jsonutils" + "yunion.io/x/onecloud/cmd/climc/shell" + "yunion.io/x/onecloud/cmd/climc/shell/events" + "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modulebase" + "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" ) -func NewK8sResourceCmd(manager modulebase.IBaseManager) *shell.ResourceCmd { - return shell.NewResourceCmd(manager).SetPrefix("k8s") +type K8sResourceCmd struct { + *shell.ResourceCmd + manager modulebase.IBaseManager +} + +func NewK8sResourceCmd(manager modulebase.IBaseManager) *K8sResourceCmd { + cmd := new(K8sResourceCmd) + cmd.ResourceCmd = shell.NewResourceCmd(manager).SetPrefix("k8s") + cmd.manager = manager + return cmd +} + +func (cmd *K8sResourceCmd) GetClusterResManager() k8s.IClusterResourceManager { + return cmd.manager.(k8s.IClusterResourceManager) +} + +func (cmd *K8sResourceCmd) ShowEvent() *K8sResourceCmd { + callback := func(s *mcclient.ClientSession, opt *events.TypeEventListOptions) error { + args := &events.EventListOptions{BaseEventListOptions: opt.BaseEventListOptions, Id: opt.ID, Type: []string{cmd.manager.GetKeyword()}} + return events.DoEventList(*k8s.Logs.ResourceManager, s, args) + } + cmd.RunWithDesc("event", fmt.Sprintf("Show operation event logs of k8s %s", cmd.manager.GetKeyword()), new(events.TypeEventListOptions), callback) + return cmd +} + +func (cmd *K8sResourceCmd) EditRaw(opt shell.IGetOpt) *K8sResourceCmd { + man := cmd.GetClusterResManager() + callback := func(s *mcclient.ClientSession, args shell.IGetOpt) error { + params, err := opt.Params() + if err != nil { + return err + } + rawData, err := man.GetRaw(s, args.GetId(), params.(*jsonutils.JSONDict)) + if err != nil { + return err + } + yamlBytes := rawData.YAMLString() + tempfile, err := ioutil.TempFile("", fmt.Sprintf("k8s-%s*.yaml", args.GetId())) + if err != nil { + return err + } + defer os.Remove(tempfile.Name()) + if _, err := tempfile.Write([]byte(yamlBytes)); err != nil { + return err + } + if err := tempfile.Close(); err != nil { + return err + } + + cmd := exec.Command("vim", tempfile.Name()) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + if err := cmd.Run(); err != nil { + return err + } + content, err := ioutil.ReadFile(tempfile.Name()) + if err != nil { + return err + } + jsonBytes, err := yaml.YAMLToJSON(content) + if err != nil { + return err + } + body, err := jsonutils.Parse(jsonBytes) + if err != nil { + return err + } + params, err = args.Params() + if err != nil { + return err + } + if _, err := man.UpdateRaw(s, args.GetId(), params.(*jsonutils.JSONDict), body.(*jsonutils.JSONDict)); err != nil { + return err + } + return nil + } + cmd.RunWithDesc("edit-raw", fmt.Sprintf("Edit and update k8s %s by raw data", man.GetKeyword()), opt, callback) + return cmd +} + +func (cmd *K8sResourceCmd) ShowRaw(args shell.IGetOpt) *K8sResourceCmd { + man := cmd.GetClusterResManager() + callback := func(s *mcclient.ClientSession, args shell.IGetOpt) error { + params, err := args.Params() + if err != nil { + return err + } + ret, err := man.GetRaw(s, args.GetId(), params.(*jsonutils.JSONDict)) + if err != nil { + return err + } + printObjectYAML(ret) + return nil + } + cmd.RunWithDesc("show-raw", fmt.Sprintf("Show k8s %s raw data", man.GetKeyword()), args, callback) + return cmd } func NewK8sJointCmd(manager modulebase.JointManager) *shell.JointCmd { diff --git a/cmd/climc/shell/k8s/ingress.go b/cmd/climc/shell/k8s/ingress.go index b29748e85e..8e87008529 100644 --- a/cmd/climc/shell/k8s/ingress.go +++ b/cmd/climc/shell/k8s/ingress.go @@ -15,25 +15,11 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initIngress() { - cmdN := initK8sNamespaceResource("ingress", k8s.Ingresses) - createCmd := NewCommand( - &o.IngressCreateOptions{}, - cmdN.CommandNameFactory("create"), - "Create ingress rules to service", - func(s *mcclient.ClientSession, args *o.IngressCreateOptions) error { - spec := args.Params() - ret, err := k8s.Ingresses.Create(s, spec) - if err != nil { - return err - } - printObject(ret) - return nil - }) - cmdN.AddR(createCmd) + cmd := initK8sNamespaceResource("ingress", k8s.Ingresses) + cmd.Create(new(o.IngressCreateOptions)) } diff --git a/cmd/climc/shell/k8s/job.go b/cmd/climc/shell/k8s/job.go index fbf16e6fb7..89a33ad006 100644 --- a/cmd/climc/shell/k8s/job.go +++ b/cmd/climc/shell/k8s/job.go @@ -15,31 +15,12 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initJob() { cmd := initK8sNamespaceResource("job", k8s.Jobs) - cmdN := cmd.CommandNameFactory - createCmd := NewCommand( - &o.JobCreateOptions{}, - cmdN("create"), - "Create job resource", - func(s *mcclient.ClientSession, args *o.JobCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Jobs.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - cmd.AddR(createCmd) + cmd.Create(new(o.JobCreateOptions)) } diff --git a/cmd/climc/shell/k8s/k8s.go b/cmd/climc/shell/k8s/k8s.go index 475a05de00..3b68685a6f 100644 --- a/cmd/climc/shell/k8s/k8s.go +++ b/cmd/climc/shell/k8s/k8s.go @@ -16,16 +16,10 @@ package k8s import ( "fmt" - "io/ioutil" - "os" - "os/exec" - - "github.com/ghodss/yaml" "yunion.io/x/jsonutils" "yunion.io/x/onecloud/cmd/climc/shell" - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modulebase" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" @@ -78,10 +72,6 @@ func resourceCmdN(prefix, suffix string) string { return fmt.Sprintf("k8s-%s-%s", prefix, suffix) } -func kubeResourceCmdN(prefix, suffix string) string { - return fmt.Sprintf("kube-%s-%s", prefix, suffix) -} - func clusterContext(clusterId string) modulebase.ManagerContext { return modulebase.ManagerContext{ InstanceManager: k8s.KubeClusters, @@ -93,261 +83,24 @@ func printObjectYAML(obj jsonutils.JSONObject) { fmt.Println(obj.YAMLString()) } -type Cmd struct { - Options interface{} - Command string - Desc string - Callback interface{} +func initK8sClusterResource(kind string, manager modulebase.Manager) *K8sResourceCmd { + cmd := NewK8sResourceCmd(manager) + cmd.SetKeyword(kind) + cmd.List(new(o.ResourceListOptions)) + cmd.Show(new(o.ResourceGetOptions)) + cmd.BatchDeleteWithParam(new(o.ResourceDeleteOptions)) + cmd.ShowEvent() + return cmd } -func NewCommand(options interface{}, command string, desc string, callback interface{}) *Cmd { - return &Cmd{ - Options: options, - Command: command, - Desc: desc, - Callback: callback, - } -} - -func (c Cmd) R() { - R(c.Options, c.Command, c.Desc, c.Callback) -} - -type ShellCommands struct { - Commands []*Cmd - CommandNameFactory func(suffix string) string -} - -func NewShellCommands(cmdN func(suffix string) string) *ShellCommands { - c := &ShellCommands{ - CommandNameFactory: cmdN, - } - c.Commands = make([]*Cmd, 0) - return c -} - -func (c *ShellCommands) AddR(rs ...*Cmd) *ShellCommands { - for _, r := range rs { - r.R() - c.Commands = append(c.Commands, r) - } - return c -} - -func initK8sClusterResource(kind string, manager modulebase.Manager) *ShellCommands { - cmdN := NewCmdNameFactory(kind) - return NewShellCommands(cmdN.Do).AddR( - NewK8sResourceListCmd(cmdN, manager), - NewK8sResourceGetCmd(cmdN, manager), - NewK8sResourceDeleteCmd(cmdN, manager), - ) -} - -func NewK8sResourceListCmd(cmdN CmdNameFactory, manager modulebase.Manager) *Cmd { - return NewCommand( - &o.ResourceListOptions{}, - cmdN.Do("list"), - fmt.Sprintf("List k8s %s", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.ResourceListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := manager.List(s, params) - if err != nil { - return err - } - PrintListResultTable(ret, manager.(k8s.ListPrinter), s) - return nil - }, - ) -} - -type CmdNameFactory struct { - Kind string - Do func(string) string -} - -func NewCmdNameFactory(kind string) CmdNameFactory { - return CmdNameFactory{ - Kind: kind, - Do: func(suffix string) string { - return resourceCmdN(kind, suffix) - }, - } -} - -func NewK8sNsResourceListCmd(cmdN CmdNameFactory, manager modulebase.Manager) *Cmd { - return NewCommand( - &o.NamespaceResourceListOptions{}, - cmdN.Do("list"), - fmt.Sprintf("List k8s %s", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.NamespaceResourceListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := manager.List(s, params) - if err != nil { - return err - } - PrintListResultTable(ret, manager.(k8s.ListPrinter), s) - return nil - }, - ) -} - -func NewK8sResourceGetCmd(cmdN CmdNameFactory, manager modulebase.Manager) *Cmd { - return NewCommand( - &o.ResourceGetOptions{}, - cmdN.Do("show"), - fmt.Sprintf("Show k8s %s", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.ResourceGetOptions) error { - ret, err := manager.Get(s, args.NAME, args.Params()) - if err != nil { - return err - } - printObjectYAML(ret) - return nil - }, - ) -} - -func NewK8sNsResourceGetCmd(cmdN CmdNameFactory, manager modulebase.Manager) *Cmd { - return NewCommand( - &o.NamespaceResourceGetOptions{}, - cmdN.Do("show"), - fmt.Sprintf("Show k8s %s", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.NamespaceResourceGetOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := manager.Get(s, args.NAME, params) - if err != nil { - return err - } - printObjectYAML(ret) - return nil - }, - ) -} - -func NewK8sNsResourceGetRawCmd(cmdN CmdNameFactory, manager k8s.IClusterResourceManager) *Cmd { - return NewCommand( - &o.NamespaceResourceGetOptions{}, - cmdN.Do("show-raw"), - fmt.Sprintf("Show k8s %s raw data", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.NamespaceResourceGetOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := manager.GetRaw(s, args.NAME, params.(*jsonutils.JSONDict)) - if err != nil { - return err - } - printObjectYAML(ret) - return nil - }, - ) -} - -func NewK8sResourceEditRawCmd(cmdN CmdNameFactory, manager k8s.IClusterResourceManager) *Cmd { - return NewCommand( - &o.NamespaceResourceGetOptions{}, - cmdN.Do("edit-raw"), - fmt.Sprintf("Edit and update k8s %s raw data", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.NamespaceResourceGetOptions) error { - params, err := args.Params() - if err != nil { - return err - } - rawData, err := manager.GetRaw(s, args.NAME, params.(*jsonutils.JSONDict)) - if err != nil { - return err - } - yamlBytes := rawData.YAMLString() - tempfile, err := ioutil.TempFile("", fmt.Sprintf("k8s-%s-%s*.yaml", cmdN.Kind, args.NAME)) - if err != nil { - return err - } - defer os.Remove(tempfile.Name()) - if _, err := tempfile.Write([]byte(yamlBytes)); err != nil { - return err - } - if err := tempfile.Close(); err != nil { - return err - } - - cmd := exec.Command("vim", tempfile.Name()) - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - if err := cmd.Run(); err != nil { - return err - } - content, err := ioutil.ReadFile(tempfile.Name()) - if err != nil { - return err - } - jsonBytes, err := yaml.YAMLToJSON(content) - if err != nil { - return err - } - body, err := jsonutils.Parse(jsonBytes) - if err != nil { - return err - } - params, err = args.Params() - if err != nil { - return err - } - if _, err := manager.UpdateRaw(s, args.NAME, params.(*jsonutils.JSONDict), body.(*jsonutils.JSONDict)); err != nil { - return err - } - return nil - }, - ) -} - -func NewK8sResourceDeleteCmd(cmdN CmdNameFactory, manager modulebase.Manager) *Cmd { - return NewCommand( - &o.ResourceDeleteOptions{}, - cmdN.Do("delete"), - fmt.Sprintf("Delete k8s %s", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.ResourceDeleteOptions) error { - ret := manager.BatchDelete(s, args.NAME, args.Params()) - printBatchResults(ret, manager.GetColumns(s)) - return nil - }, - ) -} - -func NewK8sNsResourceDeleteCmd(cmdN CmdNameFactory, manager modulebase.Manager) *Cmd { - deleteCmd := NewCommand( - &o.NamespaceResourceDeleteOptions{}, - cmdN.Do("delete"), - fmt.Sprintf("Delete k8s %s", cmdN.Kind), - func(s *mcclient.ClientSession, args *o.NamespaceResourceDeleteOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret := manager.BatchDelete(s, args.NAME, params) - printBatchResults(ret, manager.GetColumns(s)) - return nil - }, - ) - return deleteCmd -} - -func initK8sNamespaceResource(kind string, manager k8s.IClusterResourceManager) *ShellCommands { - cmdN := NewCmdNameFactory(kind) - return NewShellCommands(cmdN.Do).AddR( - NewK8sNsResourceListCmd(cmdN, manager), - NewK8sNsResourceGetCmd(cmdN, manager), - NewK8sNsResourceDeleteCmd(cmdN, manager), - NewK8sNsResourceGetRawCmd(cmdN, manager), - NewK8sResourceEditRawCmd(cmdN, manager), - ) +func initK8sNamespaceResource(kind string, manager k8s.IClusterResourceManager) *K8sResourceCmd { + cmd := NewK8sResourceCmd(manager) + cmd.SetKeyword(kind) + cmd.List(new(o.NamespaceResourceListOptions)) + cmd.Show(new(o.NamespaceResourceGetOptions)) + cmd.BatchDeleteWithParam(new(o.NamespaceResourceDeleteOptions)) + cmd.ShowRaw(new(o.NamespaceResourceGetOptions)) + cmd.EditRaw(new(o.NamespaceResourceGetOptions)) + cmd.ShowEvent() + return cmd } diff --git a/cmd/climc/shell/k8s/machines.go b/cmd/climc/shell/k8s/machines.go index bd634b0a00..abe3c02162 100644 --- a/cmd/climc/shell/k8s/machines.go +++ b/cmd/climc/shell/k8s/machines.go @@ -15,73 +15,18 @@ package k8s import ( - "fmt" - - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initKubeMachine() { - cmdN := func(action string) string { - return fmt.Sprintf("kubemachine-%s", action) - } - R(&o.MachineListOptions{}, cmdN("list"), "List k8s node machines", func(s *mcclient.ClientSession, args *o.MachineListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - result, err := k8s.KubeMachines.List(s, params) - if err != nil { - return err - } - printList(result, k8s.KubeMachines.GetColumns(s)) - return nil - }) - - R(&o.MachineCreateOptions{}, cmdN("create"), "Create k8s machine", func(s *mcclient.ClientSession, args *o.MachineCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - node, err := k8s.KubeMachines.Create(s, params) - if err != nil { - return err - } - printObject(node) - return nil - }) - - R(&o.IdentOptions{}, cmdN("show"), "Show details of a machine", func(s *mcclient.ClientSession, args *o.IdentOptions) error { - result, err := k8s.KubeMachines.Get(s, args.ID, nil) - if err != nil { - return err - } - printObject(result) - return nil - }) - - R(&o.IdentsOptions{}, cmdN("delete"), "Delete machine", func(s *mcclient.ClientSession, args *o.IdentsOptions) error { - ret := k8s.KubeMachines.BatchDelete(s, args.ID, nil) - printBatchResults(ret, k8s.KubeMachines.GetColumns(s)) - return nil - }) - - R(&o.IdentOptions{}, cmdN("recreate"), "Re-Create machine when create fail", func(s *mcclient.ClientSession, args *o.IdentOptions) error { - ret, err := k8s.KubeMachines.PerformAction(s, args.ID, "recreate", nil) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&o.IdentOptions{}, cmdN("terminate"), "Terminate a machine", func(s *mcclient.ClientSession, args *o.IdentOptions) error { - ret, err := k8s.KubeMachines.PerformAction(s, args.ID, "terminate", nil) - if err != nil { - return err - } - printObject(ret) - return nil - }) + cmd := NewK8sResourceCmd(k8s.KubeMachines) + cmd.SetKeyword("machine") + cmd.ShowEvent() + cmd.List(new(o.MachineListOptions)) + cmd.Create(new(o.MachineCreateOptions)) + cmd.Show(new(o.IdentOptions)) + cmd.BatchDelete(new(o.IdentsOptions)) + cmd.Perform("recreate", new(o.IdentOptions)) + cmd.Perform("terminate", new(o.IdentOptions)) } diff --git a/cmd/climc/shell/k8s/pods.go b/cmd/climc/shell/k8s/pods.go index 012da28909..7440063db0 100644 --- a/cmd/climc/shell/k8s/pods.go +++ b/cmd/climc/shell/k8s/pods.go @@ -16,8 +16,12 @@ package k8s import ( "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" + o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initPod() { initK8sNamespaceResource("pod", k8s.Pods) + cmd := NewK8sResourceCmd(k8s.Pods) + cmd.List(new(o.NamespaceResourceListOptions)) + cmd.Show(new(o.NamespaceResourceGetOptions)) } diff --git a/cmd/climc/shell/k8s/pvc.go b/cmd/climc/shell/k8s/pvc.go index e4d9de4e77..f3c03b13fb 100644 --- a/cmd/climc/shell/k8s/pvc.go +++ b/cmd/climc/shell/k8s/pvc.go @@ -15,46 +15,14 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initPVC() { - cmdN := NewCmdNameFactory("pvc") - pvcCmd := NewShellCommands(cmdN.Do).AddR( - NewK8sNsResourceGetCmd(cmdN, k8s.PersistentVolumeClaims), - NewK8sNsResourceDeleteCmd(cmdN, k8s.PersistentVolumeClaims), - ) - listCmd := NewCommand( - &o.PVCListOptions{}, - cmdN.Do("list"), - "List PersistentVolumeClaims resource", - func(s *mcclient.ClientSession, args *o.PVCListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.PersistentVolumeClaims.List(s, params) - if err != nil { - return err - } - PrintListResultTable(ret, k8s.PersistentVolumeClaims, s) - return nil - }, - ) - createCmd := NewCommand( - &o.PVCCreateOptions{}, - cmdN.Do("create"), - "Create PersistentVolumeClaims resource", - func(s *mcclient.ClientSession, args *o.PVCCreateOptions) error { - ret, err := k8s.PersistentVolumeClaims.Create(s, args.Params()) - if err != nil { - return err - } - printObject(ret) - return nil - }, - ) - pvcCmd.AddR(listCmd, createCmd) + cmd := NewK8sResourceCmd(k8s.PersistentVolumeClaims) + cmd.Create(new(o.PVCCreateOptions)) + cmd.Show(new(o.NamespaceResourceGetOptions)) + cmd.BatchDeleteWithParam(new(o.NamespaceResourceDeleteOptions)) + cmd.List(new(o.PVCListOptions)) } diff --git a/cmd/climc/shell/k8s/releases.go b/cmd/climc/shell/k8s/releases.go index e08333beab..cf60e46610 100644 --- a/cmd/climc/shell/k8s/releases.go +++ b/cmd/climc/shell/k8s/releases.go @@ -21,22 +21,15 @@ import ( ) func initRelease() { + cmd := NewK8sResourceCmd(k8s.Releases) + cmd.List(new(o.ReleaseListOptions)) + cmd.Create(new(o.ReleaseCreateOptions)) + cmd.Delete(new(o.ReleaseDeleteOptions)) + cmd.ShowEvent() + cmdN := func(suffix string) string { return resourceCmdN("release", suffix) } - R(&o.ReleaseListOptions{}, cmdN("list"), "List k8s cluster helm releases", func(s *mcclient.ClientSession, args *o.ReleaseListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Releases.List(s, params) - if err != nil { - return err - } - printList(ret, k8s.Releases.GetColumns(s)) - return nil - }) - R(&o.NamespaceResourceGetOptions{}, cmdN("show"), "Get helm release details", func(s *mcclient.ClientSession, args *o.NamespaceResourceGetOptions) error { params, err := args.Params() if err != nil { @@ -54,19 +47,6 @@ func initRelease() { return nil }) - R(&o.ReleaseCreateOptions{}, cmdN("create"), "Create release with specified helm chart", func(s *mcclient.ClientSession, args *o.ReleaseCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Releases.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - R(&o.ReleaseUpgradeOptions{}, cmdN("upgrade"), "Upgrade release", func(s *mcclient.ClientSession, args *o.ReleaseUpgradeOptions) error { params, err := args.Params() if err != nil { @@ -81,11 +61,6 @@ func initRelease() { return nil }) - R(&o.ReleaseDeleteOptions{}, cmdN("delete"), "Delete release", func(s *mcclient.ClientSession, args *o.ReleaseDeleteOptions) error { - _, err := k8s.Releases.Delete(s, args.NAME, args.Params()) - return err - }) - R(&o.ReleaseHistoryOptions{}, cmdN("history"), "Get release history", func(s *mcclient.ClientSession, args *o.ReleaseHistoryOptions) error { ret, err := k8s.Releases.GetSpecific(s, args.NAME, "history", args.Params()) if err != nil { diff --git a/cmd/climc/shell/k8s/repos.go b/cmd/climc/shell/k8s/repos.go index 25ec2c9dd5..f86e69b379 100644 --- a/cmd/climc/shell/k8s/repos.go +++ b/cmd/climc/shell/k8s/repos.go @@ -15,88 +15,18 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initRepo() { - cmdN := func(suffix string) string { - return resourceCmdN("repo", suffix) - } - R(&o.RepoListOptions{}, cmdN("list"), "List k8s global helm repos", func(s *mcclient.ClientSession, args *o.RepoListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - result, err := k8s.Repos.List(s, params) - if err != nil { - return err - } - printList(result, k8s.Repos.GetColumns(s)) - return nil - }) - - R(&o.RepoGetOptions{}, cmdN("show"), "Show details of a repo", func(s *mcclient.ClientSession, args *o.RepoGetOptions) error { - repo, err := k8s.Repos.Get(s, args.NAME, nil) - if err != nil { - return err - } - printObject(repo) - return nil - }) - - R(&o.RepoCreateOptions{}, cmdN("create"), "Add repository", func(s *mcclient.ClientSession, args *o.RepoCreateOptions) error { - repo, err := k8s.Repos.Create(s, args.Params()) - if err != nil { - return err - } - printObject(repo) - return nil - }) - - R(&o.RepoUpdateOptions{}, cmdN("update"), "Update helm repository", func(s *mcclient.ClientSession, args *o.RepoUpdateOptions) error { - repo, err := k8s.Repos.Update(s, args.NAME, args.Params()) - if err != nil { - return err - } - printObject(repo) - return nil - }) - - R(&o.RepoGetOptions{}, cmdN("delete"), "Delete a repository", func(s *mcclient.ClientSession, args *o.RepoGetOptions) error { - repo, err := k8s.Repos.Delete(s, args.NAME, nil) - if err != nil { - return err - } - printObject(repo) - return nil - }) - - R(&o.RepoGetOptions{}, cmdN("sync"), "Sync a repository", func(s *mcclient.ClientSession, args *o.RepoGetOptions) error { - repo, err := k8s.Repos.PerformAction(s, args.NAME, "sync", nil) - if err != nil { - return err - } - printObject(repo) - return nil - }) - - R(&o.RepoGetOptions{}, cmdN("public"), "Make repository public", func(s *mcclient.ClientSession, args *o.RepoGetOptions) error { - repo, err := k8s.Repos.PerformAction(s, args.NAME, "public", nil) - if err != nil { - return err - } - printObject(repo) - return nil - }) - - R(&o.RepoGetOptions{}, cmdN("private"), "Make repository private", func(s *mcclient.ClientSession, args *o.RepoGetOptions) error { - repo, err := k8s.Repos.PerformAction(s, args.NAME, "private", nil) - if err != nil { - return err - } - printObject(repo) - return nil - }) + cmd := NewK8sResourceCmd(k8s.Repos) + cmd.List(new(o.RepoListOptions)) + cmd.Show(new(o.RepoGetOptions)) + cmd.Create(new(o.RepoCreateOptions)) + cmd.Update(new(o.RepoUpdateOptions)) + cmd.Delete(new(o.RepoGetOptions)) + cmd.Perform("sync", new(o.RepoGetOptions)) + cmd.Perform("public", new(o.RepoPublicOptions)) + cmd.Perform("private", new(o.RepoGetOptions)) } diff --git a/cmd/climc/shell/k8s/secret.go b/cmd/climc/shell/k8s/secret.go index 90f201e3d0..57d2261dcd 100644 --- a/cmd/climc/shell/k8s/secret.go +++ b/cmd/climc/shell/k8s/secret.go @@ -15,69 +15,20 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initSecret() { - cmdN := NewCmdNameFactory("secret") - secretCmd := NewShellCommands(cmdN.Do).AddR( - NewK8sNsResourceGetCmd(cmdN, k8s.Secrets), - NewK8sNsResourceDeleteCmd(cmdN, k8s.Secrets), - ) - listCmd := NewCommand( - &o.SecretListOptions{}, - cmdN.Do("list"), - "List secret resource", - func(s *mcclient.ClientSession, args *o.SecretListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Secrets.List(s, params) - if err != nil { - return err - } - PrintListResultTable(ret, k8s.Secrets, s) - return nil - }) - secretCmd.AddR(listCmd) + cmd := NewK8sResourceCmd(k8s.Secrets) + cmd.Show(new(o.NamespaceResourceGetOptions)) + cmd.BatchDeleteWithParam(new(o.NamespaceResourceDeleteOptions)) + cmd.List(new(o.SecretListOptions)) + cmd.ShowEvent() - registryCmd := NewCmdNameFactory("secret-registry") - registryCreateCmd := NewCommand( - &o.RegistrySecretCreateOptions{}, - registryCmd.Do("create"), - "Create docker registry secret secret", - func(s *mcclient.ClientSession, args *o.RegistrySecretCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Secrets.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) + registryCmd := NewK8sResourceCmd(k8s.Secrets).WithKeyword("secret-registry") + registryCmd.Create(new(o.RegistrySecretCreateOptions)) - cephCSICmd := NewCmdNameFactory("secret-ceph-csi") - cephCSICreateCmd := NewCommand( - &o.CephCSISecretCreateOptions{}, - cephCSICmd.Do("create"), - "Create ceph csi user secret", - func(s *mcclient.ClientSession, args *o.CephCSISecretCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Secrets.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - secretCmd.AddR(cephCSICreateCmd, registryCreateCmd) + cephCSICmd := NewK8sResourceCmd(k8s.Secrets).WithKeyword("secret-ceph-csi") + cephCSICmd.Create(new(o.CephCSISecretCreateOptions)) } diff --git a/cmd/climc/shell/k8s/service.go b/cmd/climc/shell/k8s/service.go index 82140510e9..c1db17de7a 100644 --- a/cmd/climc/shell/k8s/service.go +++ b/cmd/climc/shell/k8s/service.go @@ -15,51 +15,16 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initService() { - cmdN := NewCmdNameFactory("service") - svcCmd := NewShellCommands(cmdN.Do).AddR( - NewK8sNsResourceGetCmd(cmdN, k8s.Services), - NewK8sNsResourceDeleteCmd(cmdN, k8s.Services), - ) - - listCmd := NewCommand( - &o.ServiceListOptions{}, - cmdN.Do("list"), - "List Services resource", - func(s *mcclient.ClientSession, args *o.ServiceListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Services.List(s, params) - if err != nil { - return err - } - PrintListResultTable(ret, k8s.Services, s) - return nil - }, - ) - - createCmd := NewCommand( - &o.ServiceCreateOptions{}, - cmdN.Do("create"), - "Create service resource", - func(s *mcclient.ClientSession, args *o.ServiceCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Services.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - svcCmd.AddR(listCmd, createCmd) + cmd := NewK8sResourceCmd(k8s.Services) + cmd.SetKeyword("service") + cmd.Show(new(o.NamespaceResourceGetOptions)) + cmd.BatchDeleteWithParam(new(o.NamespaceResourceDeleteOptions)) + cmd.List(new(o.ServiceListOptions)) + cmd.Create(new(o.ServiceCreateOptions)) + cmd.ShowEvent() } diff --git a/cmd/climc/shell/k8s/statefulset.go b/cmd/climc/shell/k8s/statefulset.go index 72a7bc9f09..b3f0afc022 100644 --- a/cmd/climc/shell/k8s/statefulset.go +++ b/cmd/climc/shell/k8s/statefulset.go @@ -15,31 +15,11 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initStatefulset() { cmd := initK8sNamespaceResource("statefulset", k8s.StatefulSets) - cmdN := cmd.CommandNameFactory - - createCmd := NewCommand( - &o.StatefulSetCreateOptions{}, - cmdN("create"), - "Create statefulset resource", - func(s *mcclient.ClientSession, args *o.StatefulSetCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.StatefulSets.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - cmd.AddR(createCmd) + cmd.Create(new(o.StatefulSetCreateOptions)) } diff --git a/cmd/climc/shell/k8s/storageclass.go b/cmd/climc/shell/k8s/storageclass.go index e8c65b90e6..ac59b4c386 100644 --- a/cmd/climc/shell/k8s/storageclass.go +++ b/cmd/climc/shell/k8s/storageclass.go @@ -15,70 +15,15 @@ package k8s import ( - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" o "yunion.io/x/onecloud/pkg/mcclient/options/k8s" ) func initStorageClass() { - cmdN := NewCmdNameFactory("storageclass") scCmd := initK8sClusterResource("storageclass", k8s.Storageclass) + scCmd.Perform("set-default", new(o.ClusterResourceBaseOptions)) - setDefaultCmd := NewCommand( - &o.ClusterResourceBaseOptions{}, - cmdN.Do("set-default"), - "Set storageclass as default", - func(s *mcclient.ClientSession, args *o.ClusterResourceBaseOptions) error { - ret, err := k8s.Storageclass.PerformAction(s, args.NAME, "set-default", args.Params()) - if err != nil { - return err - } - printObject(ret) - return nil - }, - ) - - scCmd.AddR(setDefaultCmd) - - addStorageClassCephCSI(scCmd) -} - -func addStorageClassCephCSI(cmd *ShellCommands) { - rbdN := NewCmdNameFactory("storageclass-ceph-csi-rbd") - rbdCreateCmd := NewCommand( - &o.StorageClassCephCSIRBDCreateOptions{}, - rbdN.Do("create"), - "Create ceph csi rbd", - func(s *mcclient.ClientSession, args *o.StorageClassCephCSIRBDCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Storageclass.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }, - ) - testConnCmd := NewCommand( - &o.StorageClassCephCSIRBDTestOptions{}, - rbdN.Do("connection-test"), - "Test storageclass connection", - func(s *mcclient.ClientSession, args *o.StorageClassCephCSIRBDTestOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := k8s.Storageclass.PerformClassAction(s, "connection-test", params) - if err != nil { - return err - } - printObject(ret) - return nil - }, - ) - - cmd.AddR(rbdCreateCmd, testConnCmd) + rbdCmd := NewK8sResourceCmd(k8s.Storageclass).SetKeyword("storageclass-ceph-csi-rbd") + rbdCmd.Create(new(o.StorageClassCephCSIRBDCreateOptions)) + rbdCmd.PerformClass("connection-test", new(o.StorageClassCephCSIRBDTestOptions)) } diff --git a/pkg/mcclient/modules/k8s/base.go b/pkg/mcclient/modules/k8s/base.go index cd3ca6143d..426500799c 100644 --- a/pkg/mcclient/modules/k8s/base.go +++ b/pkg/mcclient/modules/k8s/base.go @@ -130,23 +130,23 @@ func (c Columns) Array() []string { } func NewNameCols(col ...string) *Columns { - return NewColumns("Name", "Id").Add(col...) + return NewColumns("Name", "Id", "Status").Add(col...) } func NewMetaCols(col ...string) *Columns { - return NewNameCols("Age").Add(col...) + return NewNameCols("creationTimestamp", "Created_At").Add(col...) } func NewNamespaceCols(col ...string) *Columns { - return NewMetaCols("Namespace", "Labels").Add(col...) + return NewMetaCols("Namespace_ID", "Namespace", "Labels").Add(col...) } func NewClusterCols(col ...string) *Columns { - return NewColumns("Cluster").Add(col...) + return NewColumns("Cluster_ID", "Cluster").Add(col...) } func NewResourceCols(col ...string) *Columns { - return NewNameCols("ID").Add(col...) + return NewNameCols().Add(col...) } func NewFedJointClusterCols(col ...string) *Columns { diff --git a/pkg/mcclient/modules/k8s/cluster.go b/pkg/mcclient/modules/k8s/cluster.go index ebec6fa97c..7009b5adf4 100644 --- a/pkg/mcclient/modules/k8s/cluster.go +++ b/pkg/mcclient/modules/k8s/cluster.go @@ -24,7 +24,7 @@ var ( func init() { KubeClusters = NewResourceManager("kubecluster", "kubeclusters", - NewResourceCols("cluster_type", "resource_type", "cloud_type", "version", "status", "mode", "provider", "machines"), - NewColumns("sync_status", "sync_message")) + NewResourceCols("Cluster_Type", "Resource_Type", "Cloud_Type", "Version", "Status", "Mode", "Provider", "Machines"), + NewColumns("Sync_Status", "Sync_Message")) modules.Register(KubeClusters) } diff --git a/pkg/mcclient/modules/k8s/helm.go b/pkg/mcclient/modules/k8s/helm.go index 1aa5c1825d..9c4076f63d 100644 --- a/pkg/mcclient/modules/k8s/helm.go +++ b/pkg/mcclient/modules/k8s/helm.go @@ -24,7 +24,7 @@ var ( func init() { Repos = NewResourceManager("repo", "repos", - NewResourceCols("url", "is_public", "source", "type"), + NewResourceCols("Url", "Is_Public", "Source", "Type"), NewColumns(), ) modules.Register(Repos) diff --git a/pkg/mcclient/modules/k8s/helm_release.go b/pkg/mcclient/modules/k8s/helm_release.go index e56a542124..d73a1fdb93 100644 --- a/pkg/mcclient/modules/k8s/helm_release.go +++ b/pkg/mcclient/modules/k8s/helm_release.go @@ -28,6 +28,8 @@ type ReleaseManager struct { func init() { Releases = &ReleaseManager{ - NewNamespaceResourceManager("release", "releases", NewNamespaceCols("status", "type"), NewColumns())} + NewNamespaceResourceManager("release", "releases", NewNamespaceCols( + "Chart", "Chart_Version", "Status", "Type", "Repo_Id", "Repo", + ), NewColumns())} modules.Register(Releases) } diff --git a/pkg/mcclient/options/k8s/base.go b/pkg/mcclient/options/k8s/base.go index 8eeab31f3b..122a8ca444 100644 --- a/pkg/mcclient/options/k8s/base.go +++ b/pkg/mcclient/options/k8s/base.go @@ -37,11 +37,15 @@ type ClusterResourceBaseOptions struct { NAME string `help:"Name of resource"` } -func (o ClusterResourceBaseOptions) Params() jsonutils.JSONObject { +func (o ClusterResourceBaseOptions) GetId() string { + return o.NAME +} + +func (o ClusterResourceBaseOptions) Params() (jsonutils.JSONObject, error) { params := jsonutils.NewDict() params.Add(jsonutils.NewString(o.Cluster), "cluster") params.Add(jsonutils.NewString(o.NAME), "name") - return params + return params, nil } type BaseListOptions struct { @@ -65,7 +69,7 @@ type ResourceListOptions struct { BaseListOptions } -func (o ResourceListOptions) Params() (*jsonutils.JSONDict, error) { +func (o ResourceListOptions) Params() (jsonutils.JSONObject, error) { params, err := o.BaseListOptions.Params() if err != nil { return nil, err @@ -79,9 +83,9 @@ type ResourceGetOptions struct { NAME string `help:"Name ident of the resource"` } -func (o ResourceGetOptions) Params() *jsonutils.JSONDict { +func (o ResourceGetOptions) Params() (jsonutils.JSONObject, error) { params := o.ClusterBaseOptions.Params() - return params + return params, nil } func (o ResourceGetOptions) GetId() string { @@ -93,9 +97,17 @@ type ResourceDeleteOptions struct { NAME []string `help:"Name ident of the resources"` } -func (o ResourceDeleteOptions) Params() *jsonutils.JSONDict { +func (o ResourceDeleteOptions) GetIds() []string { + return o.NAME +} + +func (o ResourceDeleteOptions) QueryParams() (jsonutils.JSONObject, error) { + return nil, nil +} + +func (o ResourceDeleteOptions) Params() (jsonutils.JSONObject, error) { params := o.ClusterBaseOptions.Params() - return params + return params, nil } type ResourceIdsOptions struct { @@ -112,8 +124,7 @@ func (o ResourceIdsOptions) Params() (jsonutils.JSONObject, error) { type NamespaceResourceListOptions struct { ResourceListOptions - Namespace string `help:"Namespace of this resource"` - AllNamespace bool `help:"Show resource in all namespace"` + Namespace string `help:"Namespace of this resource"` } func (o NamespaceResourceListOptions) Params() (jsonutils.JSONObject, error) { @@ -121,12 +132,8 @@ func (o NamespaceResourceListOptions) Params() (jsonutils.JSONObject, error) { if err != nil { return nil, err } - if o.AllNamespace { - params.Add(jsonutils.JSONTrue, "all_namespace") - return params, nil - } if o.Namespace != "" { - params.Add(jsonutils.NewString(o.Namespace), "namespace") + params.(*jsonutils.JSONDict).Add(jsonutils.NewString(o.Namespace), "namespace") } return params, nil } @@ -149,8 +156,11 @@ type NamespaceResourceGetOptions struct { } func (o NamespaceResourceGetOptions) Params() (jsonutils.JSONObject, error) { - params := o.ResourceGetOptions.Params() - params.Update(o.NamespaceOptions.Params()) + params, err := o.ResourceGetOptions.Params() + if err != nil { + return nil, err + } + params.(*jsonutils.JSONDict).Update(o.NamespaceOptions.Params()) return params, nil } @@ -159,9 +169,16 @@ type NamespaceResourceDeleteOptions struct { NamespaceOptions } +func (o NamespaceResourceDeleteOptions) QueryParams() (jsonutils.JSONObject, error) { + return nil, nil +} + func (o NamespaceResourceDeleteOptions) Params() (jsonutils.JSONObject, error) { - params := o.ResourceDeleteOptions.Params() - params.Update(o.NamespaceOptions.Params()) + params, err := o.ResourceDeleteOptions.Params() + if err != nil { + return nil, err + } + params.(*jsonutils.JSONDict).Update(o.NamespaceOptions.Params()) return params, nil } diff --git a/pkg/mcclient/options/k8s/certs.go b/pkg/mcclient/options/k8s/certs.go index 8d3f78fb58..7ed6551399 100644 --- a/pkg/mcclient/options/k8s/certs.go +++ b/pkg/mcclient/options/k8s/certs.go @@ -25,6 +25,6 @@ type CertListOptions struct { Cluster string `help:"Filter by cluster"` } -func (o CertListOptions) Params() (*jsonutils.JSONDict, error) { +func (o CertListOptions) Params() (jsonutils.JSONObject, error) { return options.ListStructToParams(&o) } diff --git a/pkg/mcclient/options/k8s/cluster.go b/pkg/mcclient/options/k8s/cluster.go index 4114494623..4b3c38871c 100644 --- a/pkg/mcclient/options/k8s/cluster.go +++ b/pkg/mcclient/options/k8s/cluster.go @@ -185,6 +185,12 @@ func (o KubeClusterImportOptions) Params() (jsonutils.JSONObject, error) { return params, nil } +type ClusterGCOpts struct{} + +func (o ClusterGCOpts) Params() (jsonutils.JSONObject, error) { + return nil, nil +} + type IdentOptions struct { ID string `help:"ID or name of the model"` } @@ -197,12 +203,27 @@ func (o IdentOptions) GetId() string { return o.ID } +type ClusterPurgeOptions struct { + IdentOptions + Force bool `help:"force purge"` +} + +func (o ClusterPurgeOptions) Params() (jsonutils.JSONObject, error) { + params := jsonutils.NewDict() + force := jsonutils.JSONFalse + if o.Force { + force = jsonutils.JSONTrue + } + params.Add(force, "force") + return params, nil +} + type ClusterSyncOptions struct { IdentOptions Force bool `help:"force sync"` } -func (o ClusterSyncOptions) Params() (*jsonutils.JSONDict, error) { +func (o ClusterSyncOptions) Params() (jsonutils.JSONObject, error) { param := jsonutils.NewDict() if o.Force { param.Add(jsonutils.JSONTrue, "force") @@ -220,6 +241,14 @@ type IdentsOptions struct { ID []string `help:"ID of models to operate"` } +func (o IdentsOptions) GetIds() []string { + return o.ID +} + +func (o IdentsOptions) Params() (jsonutils.JSONObject, error) { + return nil, nil +} + type ClusterDeleteOptions struct { IdentsOptions } @@ -229,7 +258,7 @@ type KubeClusterAddMachinesOptions struct { AddMachineOptions } -func (o AddMachineOptions) Params() (*jsonutils.JSONArray, error) { +func (o AddMachineOptions) Params() (jsonutils.JSONObject, error) { machineObjs := jsonutils.NewArray() if len(o.Machine) == 0 { return machineObjs, nil @@ -248,7 +277,7 @@ func (o AddMachineOptions) Params() (*jsonutils.JSONArray, error) { return machineObjs, nil } -func (o KubeClusterAddMachinesOptions) Params() (*jsonutils.JSONDict, error) { +func (o KubeClusterAddMachinesOptions) Params() (jsonutils.JSONObject, error) { params := jsonutils.NewDict() machinesArray, err := o.AddMachineOptions.Params() if err != nil { @@ -263,7 +292,7 @@ type KubeClusterDeleteMachinesOptions struct { Machines []string `help:"Machine id or name"` } -func (o KubeClusterDeleteMachinesOptions) Params() (*jsonutils.JSONDict, error) { +func (o KubeClusterDeleteMachinesOptions) Params() (jsonutils.JSONObject, error) { params := jsonutils.NewDict() machinesArray := jsonutils.NewArray() for _, m := range o.Machines { diff --git a/pkg/mcclient/options/k8s/deployment.go b/pkg/mcclient/options/k8s/deployment.go index ffaad44b87..1b90056c89 100644 --- a/pkg/mcclient/options/k8s/deployment.go +++ b/pkg/mcclient/options/k8s/deployment.go @@ -29,7 +29,7 @@ type DeploymentCreateOptions struct { Replicas int64 `help:"Number of replicas for pods in this deployment"` } -func (o DeploymentCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o DeploymentCreateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() o.K8sPodTemplateOptions.setContainerName(o.NAME) if err := o.K8sPodTemplateOptions.Attach(params); err != nil { @@ -54,7 +54,11 @@ type DeploymentUpdateOptions struct { Image []string `help:"Image of container to set, e.g. 'default=nginx:latest'"` } -func (o DeploymentUpdateOptions) Params() (*jsonutils.JSONDict, error) { +func (o DeploymentUpdateOptions) GetId() string { + return o.NAME +} + +func (o DeploymentUpdateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() containers := jsonutils.NewArray() for _, img := range o.Image { diff --git a/pkg/mcclient/options/k8s/fed_namespace.go b/pkg/mcclient/options/k8s/fed_namespace.go index 2e73f84f9e..40684117c3 100644 --- a/pkg/mcclient/options/k8s/fed_namespace.go +++ b/pkg/mcclient/options/k8s/fed_namespace.go @@ -26,7 +26,7 @@ type FedNamespaceListOptions struct { type FedNamespaceCreateOptions struct { FedResourceCreateOptions - Spec FedNamespaceSpec `json:"spec"` + Spec FedNamespaceSpec `json:"spec,allowempty"` } func (o *FedNamespaceCreateOptions) Params() (jsonutils.JSONObject, error) { @@ -34,9 +34,9 @@ func (o *FedNamespaceCreateOptions) Params() (jsonutils.JSONObject, error) { } type FedNamespaceSpec struct { - Template NamespaceTemplate `json:"template"` + Template NamespaceTemplate `json:"template,allowempty"` } type NamespaceTemplate struct { - Spec corev1.NamespaceSpec `json:"spec"` + Spec corev1.NamespaceSpec `json:"spec,allowempty"` } diff --git a/pkg/mcclient/options/k8s/ingress.go b/pkg/mcclient/options/k8s/ingress.go index 7e52e4b146..5cd5e4df80 100644 --- a/pkg/mcclient/options/k8s/ingress.go +++ b/pkg/mcclient/options/k8s/ingress.go @@ -27,7 +27,7 @@ type IngressCreateOptions struct { Host string `help:"Fuly qualified domain name of a network host" required:"true"` } -func (o IngressCreateOptions) Params() *jsonutils.JSONDict { +func (o IngressCreateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() params.Add(jsonutils.NewString(o.NAME), "name") path := jsonutils.NewDict() @@ -44,5 +44,5 @@ func (o IngressCreateOptions) Params() *jsonutils.JSONDict { rules := jsonutils.NewArray() rules.Add(rule) params.Add(rules, "rules") - return params + return params, nil } diff --git a/pkg/mcclient/options/k8s/job.go b/pkg/mcclient/options/k8s/job.go index 3773ab9426..bdb07acfc8 100644 --- a/pkg/mcclient/options/k8s/job.go +++ b/pkg/mcclient/options/k8s/job.go @@ -56,7 +56,7 @@ type JobCreateOptions struct { NAME string `help:"Name of job"` } -func (o JobCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o JobCreateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() if err := o.JobTemplateOptions.Attach(params, o.NAME); err != nil { return nil, err @@ -72,7 +72,7 @@ type CronJobCreateOptions struct { Schedule string `help:"The chedule in Cron format, e.g. '*/10 * * * *'" required:"true"` } -func (o CronJobCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o CronJobCreateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() if err := o.JobTemplateOptions.Attach(params, o.NAME, "jobTemplate", "spec"); err != nil { diff --git a/pkg/mcclient/options/k8s/machine.go b/pkg/mcclient/options/k8s/machine.go index 95bf96553f..0762134f9b 100644 --- a/pkg/mcclient/options/k8s/machine.go +++ b/pkg/mcclient/options/k8s/machine.go @@ -29,7 +29,7 @@ type MachineListOptions struct { Cluster string `help:"Filter by cluster"` } -func (o MachineListOptions) Params() (*jsonutils.JSONDict, error) { +func (o MachineListOptions) Params() (jsonutils.JSONObject, error) { return options.ListStructToParams(&o) } @@ -46,7 +46,7 @@ type MachineCreateOptions struct { Hypervisor string `help:"VM hypervisor"` } -func (o MachineCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o MachineCreateOptions) Params() (jsonutils.JSONObject, error) { params := jsonutils.NewDict() if o.Name != "" { params.Add(jsonutils.NewString(o.Name), "name") diff --git a/pkg/mcclient/options/k8s/pvc.go b/pkg/mcclient/options/k8s/pvc.go index b6def6c31e..a7bdc7952d 100644 --- a/pkg/mcclient/options/k8s/pvc.go +++ b/pkg/mcclient/options/k8s/pvc.go @@ -41,12 +41,12 @@ type PVCCreateOptions struct { StorageClass string `help:"PVC StorageClassName"` } -func (o PVCCreateOptions) Params() *jsonutils.JSONDict { +func (o PVCCreateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() params.Add(jsonutils.NewString(o.NAME), "name") params.Add(jsonutils.NewString(o.SIZE), "size") if o.StorageClass != "" { params.Add(jsonutils.NewString(o.StorageClass), "storageClass") } - return params + return params, nil } diff --git a/pkg/mcclient/options/k8s/release.go b/pkg/mcclient/options/k8s/release.go index 68933f717f..11ee10f363 100644 --- a/pkg/mcclient/options/k8s/release.go +++ b/pkg/mcclient/options/k8s/release.go @@ -107,7 +107,7 @@ type ReleaseCreateOptions struct { CHARTNAME string `help:"Helm chart name, e.g stable/etcd"` } -func (o ReleaseCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o ReleaseCreateOptions) Params() (jsonutils.JSONObject, error) { params, err := o.AppBaseCreateOptions.Params() if err != nil { return nil, err @@ -147,6 +147,14 @@ type ReleaseDeleteOptions struct { NAME string `help:"Release instance name"` } +func (o *ReleaseDeleteOptions) GetId() string { + return o.NAME +} + +func (o *ReleaseDeleteOptions) Params() (jsonutils.JSONObject, error) { + return o.NamespaceWithClusterOptions.Params(), nil +} + type ReleaseHistoryOptions struct { NamespaceWithClusterOptions NAME string `help:"Release instance name"` diff --git a/pkg/mcclient/options/k8s/repo.go b/pkg/mcclient/options/k8s/repo.go index 425d3b27ed..b4be8dfbba 100644 --- a/pkg/mcclient/options/k8s/repo.go +++ b/pkg/mcclient/options/k8s/repo.go @@ -22,12 +22,32 @@ import ( type RepoListOptions struct { options.BaseListOptions + Type string `help:"Helm repostitory type" json:"type" choices:"internal|external"` +} + +func (o *RepoListOptions) Params() (jsonutils.JSONObject, error) { + params, err := o.BaseListOptions.Params() + if err != nil { + return nil, err + } + if o.Type != "" { + params.Add(jsonutils.NewString(o.Type), "type") + } + return params, nil } type RepoGetOptions struct { NAME string `help:"ID or name of the repo"` } +func (o *RepoGetOptions) GetId() string { + return o.NAME +} + +func (o *RepoGetOptions) Params() (jsonutils.JSONObject, error) { + return nil, nil +} + type RepoCreateOptions struct { RepoGetOptions Type string `help:"Repository type" choices:"internal|external"` @@ -35,7 +55,7 @@ type RepoCreateOptions struct { Public bool `help:"Make repostitory public"` } -func (o RepoCreateOptions) Params() *jsonutils.JSONDict { +func (o RepoCreateOptions) Params() (jsonutils.JSONObject, error) { params := jsonutils.NewDict() params.Add(jsonutils.NewString(o.NAME), "name") params.Add(jsonutils.NewString(o.URL), "url") @@ -45,7 +65,7 @@ func (o RepoCreateOptions) Params() *jsonutils.JSONDict { if o.Public { params.Add(jsonutils.JSONTrue, "is_public") } - return params + return params, nil } type RepoUpdateOptions struct { @@ -54,7 +74,11 @@ type RepoUpdateOptions struct { Url string `help:"Repository url to change"` } -func (o RepoUpdateOptions) Params() *jsonutils.JSONDict { +func (o RepoUpdateOptions) GetId() string { + return o.NAME +} + +func (o RepoUpdateOptions) Params() (jsonutils.JSONObject, error) { params := jsonutils.NewDict() if o.Name != "" { params.Add(jsonutils.NewString(o.Name), "name") @@ -62,5 +86,19 @@ func (o RepoUpdateOptions) Params() *jsonutils.JSONDict { if o.Url != "" { params.Add(jsonutils.NewString(o.Url), "url") } - return params + return params, nil +} + +type RepoPublicOptions struct { + ID string `help:"ID or name of repo" json:"-"` + Scope string `help:"sharing scope" choices:"system|domain"` + SharedDomains []string `help:"share to domains"` +} + +func (o *RepoPublicOptions) GetId() string { + return o.ID +} + +func (o *RepoPublicOptions) Params() (jsonutils.JSONObject, error) { + return jsonutils.Marshal(o), nil } diff --git a/pkg/mcclient/options/k8s/secret.go b/pkg/mcclient/options/k8s/secret.go index c8085a6a16..14b4cf73b6 100644 --- a/pkg/mcclient/options/k8s/secret.go +++ b/pkg/mcclient/options/k8s/secret.go @@ -42,7 +42,7 @@ type RegistrySecretCreateOptions struct { Email string `help:"Docker registry user email"` } -func (o RegistrySecretCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o RegistrySecretCreateOptions) Params() (jsonutils.JSONObject, error) { input, err := o.SecretCreateOptions.Params("kubernetes.io/dockerconfigjson") if err != nil { return nil, err @@ -76,7 +76,7 @@ type CephCSISecretCreateOptions struct { USERKEY string `help:"User key"` } -func (o CephCSISecretCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o CephCSISecretCreateOptions) Params() (jsonutils.JSONObject, error) { params, err := o.SecretCreateOptions.Params("yunion.io/ceph-csi") if err != nil { return nil, err diff --git a/pkg/mcclient/options/k8s/service.go b/pkg/mcclient/options/k8s/service.go index 85d48796aa..a3f1eb59d2 100644 --- a/pkg/mcclient/options/k8s/service.go +++ b/pkg/mcclient/options/k8s/service.go @@ -57,7 +57,7 @@ type ServiceCreateOptions struct { Selector []string `help:"Selectors are backends pods labels, e.g. 'run=app'"` } -func (o ServiceCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o ServiceCreateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() svcSpec, err := o.ServiceSpecOptions.Params() if err != nil { diff --git a/pkg/mcclient/options/k8s/statefulset.go b/pkg/mcclient/options/k8s/statefulset.go index e7277819da..fcaf3f59f1 100644 --- a/pkg/mcclient/options/k8s/statefulset.go +++ b/pkg/mcclient/options/k8s/statefulset.go @@ -31,7 +31,7 @@ type StatefulSetCreateOptions struct { K8sPVCTemplateOptions } -func (o StatefulSetCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o StatefulSetCreateOptions) Params() (jsonutils.JSONObject, error) { params := o.NamespaceWithClusterOptions.Params() pvcs, err := o.K8sPVCTemplateOptions.Parse() if err != nil { diff --git a/pkg/mcclient/options/k8s/storageclass.go b/pkg/mcclient/options/k8s/storageclass.go index ddbd11e1bb..ea8e6cdefc 100644 --- a/pkg/mcclient/options/k8s/storageclass.go +++ b/pkg/mcclient/options/k8s/storageclass.go @@ -36,7 +36,7 @@ type StorageClassCephCSIRBDTestOptions struct { SecretNamespace string `help:"Ceph credentials secret namespace"` } -func (o *StorageClassCephCSIRBDTestOptions) Params() (*jsonutils.JSONDict, error) { +func (o *StorageClassCephCSIRBDTestOptions) Params() (jsonutils.JSONObject, error) { params := o.StorageClassCreateOptions.Params("rbd.csi.ceph.com") input, err := o.getInput() if err != nil { @@ -61,7 +61,7 @@ type StorageClassCephCSIRBDCreateOptions struct { FsType string `help:"CSI default volume filesystem type" default:"ext4"` } -func (o *StorageClassCephCSIRBDCreateOptions) Params() (*jsonutils.JSONDict, error) { +func (o *StorageClassCephCSIRBDCreateOptions) Params() (jsonutils.JSONObject, error) { params, err := o.StorageClassCephCSIRBDTestOptions.Params() if err != nil { return nil, err @@ -70,7 +70,7 @@ func (o *StorageClassCephCSIRBDCreateOptions) Params() (*jsonutils.JSONDict, err if err != nil { return nil, err } - params.Add(input, "cephCSIRBD") + params.(*jsonutils.JSONDict).Add(input, "cephCSIRBD") return params, nil }