climc: refactor k8s sub command

This commit is contained in:
Zexi Li
2020-09-23 23:43:12 +08:00
parent e805d0be45
commit e2604d5311
43 changed files with 394 additions and 946 deletions
+4 -19
View File
@@ -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)
+20 -20
View File
@@ -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)
}
+2 -18
View File
@@ -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))
}
+10 -67
View File
@@ -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")
+1 -20
View File
@@ -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))
}
+2 -38
View File
@@ -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))
}
+2 -1
View File
@@ -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))
+9 -9
View File
@@ -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
}
+2 -1
View File
@@ -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()
}
+2 -1
View File
@@ -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))
+2 -1
View File
@@ -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()
}
+108 -2
View File
@@ -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 {
+2 -16
View File
@@ -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))
}
+1 -20
View File
@@ -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))
}
+18 -265
View File
@@ -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
}
+9 -64
View File
@@ -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))
}
+4
View File
@@ -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))
}
+5 -37
View File
@@ -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))
}
+6 -31
View File
@@ -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 {
+9 -79
View File
@@ -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))
}
+9 -58
View File
@@ -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))
}
+7 -42
View File
@@ -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()
}
+1 -21
View File
@@ -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))
}
+4 -59
View File
@@ -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))
}