diff --git a/cmd/climc/shell/k8s/clusters.go b/cmd/climc/shell/k8s/clusters.go index a9f515d801..ebfed4b12f 100644 --- a/cmd/climc/shell/k8s/clusters.go +++ b/cmd/climc/shell/k8s/clusters.go @@ -2,6 +2,11 @@ package k8s import ( "fmt" + "io/ioutil" + "os" + "os/exec" + + "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" @@ -142,4 +147,60 @@ func initCluster() { printObject(ret) return nil }) + + R(&o.IdentOptions{}, cmdN("engineconfig-edit"), "Edit and update kubernetes engine config of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error { + ret, err := k8s.Clusters.GetSpecific(s, args.ID, "engine-config", nil) + if err != nil { + return err + } + conf, err := ret.GetString("config") + if err != nil { + return err + } + tempfile, err := ioutil.TempFile("", fmt.Sprintf("%s-engineconfig", args.ID)) + if err != nil { + return err + } + defer os.Remove(tempfile.Name()) + + if _, err := tempfile.Write([]byte(conf)); 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 + } + + params := jsonutils.NewDict() + configBytes, err := ioutil.ReadFile(tempfile.Name()) + if err != nil { + return err + } + params.Add(jsonutils.NewString(string(configBytes)), "config") + result, err := k8s.Clusters.PerformAction(s, args.ID, "update-engine-config", params) + if err != nil { + return err + } + conf, err = result.GetString("config") + if err != nil { + return err + } + fmt.Println(conf) + return nil + }) + + R(&o.IdentOptions{}, cmdN("sync-config"), "Sync kubernetes cluster by engineconfig", func(s *mcclient.ClientSession, args *o.IdentOptions) error { + ret, err := k8s.Clusters.PerformAction(s, args.ID, "sync-config", nil) + if err != nil { + return err + } + printObject(ret) + return nil + }) } diff --git a/cmd/climc/shell/version.go b/cmd/climc/shell/version.go index 5a28eaf0a5..e85f22c3d3 100644 --- a/cmd/climc/shell/version.go +++ b/cmd/climc/shell/version.go @@ -2,15 +2,17 @@ package shell import ( "fmt" + "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules" + "yunion.io/x/onecloud/pkg/mcclient/options" ) func init() { type VersionOptions struct { SERVICE string `help:"Service type"` } - R(&VersionOptions{}, "version-show", "Show version of a backend service", func(s *mcclient.ClientSession, args *VersionOptions) error { + R(&VersionOptions{}, "version-show", "query backend service for its version", func(s *mcclient.ClientSession, args *VersionOptions) error { body, err := modules.GetVersion(s, args.SERVICE) if err != nil { return err @@ -18,4 +20,33 @@ func init() { fmt.Println(body) return nil }) + + R(&options.VersionListOptions{}, "yunionagent-version-list", "show versions of backend services", func(s *mcclient.ClientSession, opts *options.VersionListOptions) error { + if len(opts.Region) == 0 { + opts.Region = s.GetRegion() + } + params, err := options.StructToParams(opts) + if err != nil { + return err + } + result, err := modules.Version.List(s, params) + if err != nil { + return err + } + printList(result, []string{}) + return nil + }) + + R(&options.VersionGetOptions{}, "yunionagent-version-show", "Show service version", func(s *mcclient.ClientSession, opts *options.VersionGetOptions) error { + result, err := modules.Version.Get(s, opts.Service, nil) + if err != nil { + return err + } + ver, err := result.GetString() + if err != nil { + return err + } + fmt.Printf("%s\n", ver) + return nil + }) } diff --git a/pkg/mcclient/options/version.go b/pkg/mcclient/options/version.go new file mode 100644 index 0000000000..99bf335773 --- /dev/null +++ b/pkg/mcclient/options/version.go @@ -0,0 +1,9 @@ +package options + +type VersionListOptions struct { + Region string +} + +type VersionGetOptions struct { + Service string `choices:"cloud" default:"cloud"` +}