From 87d99fca2a0193168d2b1d3dcc35d84f677d07f2 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Fri, 7 Sep 2018 12:09:40 +0800 Subject: [PATCH] climc: k8s general raw resource GET, PUT, DELETE support --- cmd/climc/shell/k8s/raw.go | 42 +++++++++++++++++++++++++++++---- pkg/mcclient/modules/k8s/raw.go | 21 ++++++++--------- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/cmd/climc/shell/k8s/raw.go b/cmd/climc/shell/k8s/raw.go index 79c6f8537d..ac4d6daf52 100644 --- a/cmd/climc/shell/k8s/raw.go +++ b/cmd/climc/shell/k8s/raw.go @@ -1,32 +1,64 @@ package k8s import ( + "fmt" + "io/ioutil" + + "yunion.io/x/jsonutils" + "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules/k8s" ) -type rawGetOpt struct { +type rawOpt struct { namespaceOptions KIND string `help:"resource kind"` NAME string `help:"instance name"` } +type rawGetOpt struct { + rawOpt + Output string `help:"Output format" short-token:"o" default:"yaml" choices:"json|yaml"` +} + type rawDeleteOpt struct { - rawGetOpt + rawOpt +} + +type rawPutOpt struct { + rawOpt + File string `help:"Resource json description file" short-token:"f"` } func initRaw() { R(&rawGetOpt{}, "k8s-get", "Get k8s resource instance raw info", func(s *mcclient.ClientSession, args *rawGetOpt) error { - obj, err := k8s.RawResource.Get(s, args.KIND, args.Namespace, args.NAME, args.ClusterParams()) + obj, err := k8s.RawResource.Get(s, args.KIND, args.Namespace, args.NAME, args.Cluster) if err != nil { return err } - printObjectYAML(obj) + if args.Output == "json" { + fmt.Println(obj.PrettyString()) + } else { + printObjectYAML(obj) + } return nil }) R(&rawDeleteOpt{}, "k8s-delete", "Delete k8s resource instance", func(s *mcclient.ClientSession, args *rawDeleteOpt) error { - err := k8s.RawResource.Delete(s, args.KIND, args.Namespace, args.NAME, args.ClusterParams()) + err := k8s.RawResource.Delete(s, args.KIND, args.Namespace, args.NAME, args.Cluster) + if err != nil { + return err + } + return nil + }) + + R(&rawPutOpt{}, "k8s-put", "Update k8s resource instance", func(s *mcclient.ClientSession, args *rawPutOpt) error { + content, err := ioutil.ReadFile(args.File) + if err != nil { + return err + } + body := jsonutils.Marshal(string(content)) + err = k8s.RawResource.Put(s, args.KIND, args.Namespace, args.NAME, body, args.Cluster) if err != nil { return err } diff --git a/pkg/mcclient/modules/k8s/raw.go b/pkg/mcclient/modules/k8s/raw.go index 1f91f1092a..d291ab9488 100644 --- a/pkg/mcclient/modules/k8s/raw.go +++ b/pkg/mcclient/modules/k8s/raw.go @@ -23,10 +23,10 @@ type rawResource struct { query jsonutils.JSONObject } -func newRawResource(kind, namespace, name string, query jsonutils.JSONObject) *rawResource { +func newRawResource(kind, namespace, name, cluster string) *rawResource { nsQuery := getNamespaceQuery(namespace) - if query != nil { - nsQuery.Update(query) + if cluster != "" { + nsQuery.Add(jsonutils.NewString(cluster), "cluster") } ctx := &rawResource{kind: kind, name: name, query: nsQuery} return ctx @@ -62,22 +62,21 @@ func getNamespaceQuery(namespace string) *jsonutils.JSONDict { return query } -func (m *RawResourceManager) Get(s *mcclient.ClientSession, kind string, namespace string, name string, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { - ctx := newRawResource(kind, namespace, name, query) +func (m *RawResourceManager) Get(s *mcclient.ClientSession, kind string, namespace string, name string, cluster string) (jsonutils.JSONObject, error) { + ctx := newRawResource(kind, namespace, name, cluster) return m.request(s, "GET", ctx.path(), nil) } -func (m *RawResourceManager) Put(s *mcclient.ClientSession, kind string, namespace string, name string, body jsonutils.JSONObject) error { - rawBytes := body.String() +func (m *RawResourceManager) Put(s *mcclient.ClientSession, kind string, namespace string, name string, body jsonutils.JSONObject, cluster string) error { newBody := jsonutils.NewDict() - newBody.Add(jsonutils.NewString(rawBytes), "raw") - ctx := newRawResource(kind, namespace, name, nil) + newBody.Add(body, "raw") + ctx := newRawResource(kind, namespace, name, cluster) _, err := m.request(s, "PUT", ctx.path(), newBody) return err } -func (m *RawResourceManager) Delete(s *mcclient.ClientSession, kind string, namespace string, name string, query jsonutils.JSONObject) error { - ctx := newRawResource(kind, namespace, name, query) +func (m *RawResourceManager) Delete(s *mcclient.ClientSession, kind string, namespace string, name string, cluster string) error { + ctx := newRawResource(kind, namespace, name, cluster) _, err := m.request(s, "DELETE", ctx.path(), nil) return err }