From b0c62d55124f8aeed565342c76fdbe81787c72c3 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Tue, 4 Sep 2018 16:25:38 +0800 Subject: [PATCH] climc: k8s resources cluster in query or data --- cmd/climc/shell/k8s/configmap.go | 3 ++- cmd/climc/shell/k8s/deployment.go | 11 +++++---- cmd/climc/shell/k8s/k8s.go | 8 ++++--- cmd/climc/shell/k8s/pods.go | 5 ++-- cmd/climc/shell/k8s/raw.go | 4 ++-- cmd/climc/shell/k8s/releases.go | 13 +++++++---- cmd/climc/shell/k8s/service.go | 3 ++- cmd/climc/shell/k8s/tiller.go | 4 ++-- pkg/mcclient/modules/k8s/raw.go | 38 +++++++++++-------------------- 9 files changed, 43 insertions(+), 46 deletions(-) diff --git a/cmd/climc/shell/k8s/configmap.go b/cmd/climc/shell/k8s/configmap.go index 30d8fd6d9e..6162aa1dc4 100644 --- a/cmd/climc/shell/k8s/configmap.go +++ b/cmd/climc/shell/k8s/configmap.go @@ -17,7 +17,8 @@ func initConfigMap() { R(&listOpt{}, cmdN("list"), "List k8s configmap", func(s *mcclient.ClientSession, args *listOpt) error { params := fetchNamespaceParams(args.namespaceListOptions) params.Update(fetchPagingParams(args.baseListOptions)) - ret, err := k8s.ConfigMaps.ListInContexts(s, params, args.ClusterContext()) + params.Update(args.ClusterParams()) + ret, err := k8s.ConfigMaps.List(s, params) if err != nil { return err } diff --git a/cmd/climc/shell/k8s/deployment.go b/cmd/climc/shell/k8s/deployment.go index 6063b59739..87e027725b 100644 --- a/cmd/climc/shell/k8s/deployment.go +++ b/cmd/climc/shell/k8s/deployment.go @@ -25,7 +25,8 @@ func initDeployment() { R(&listOpt{}, cmdN("list"), "List k8s deployment", func(s *mcclient.ClientSession, args *listOpt) error { params := fetchNamespaceParams(args.namespaceListOptions) params.Update(fetchPagingParams(args.baseListOptions)) - ret, err := k8s.Deployments.ListInContexts(s, params, args.ClusterContext()) + params.Update(args.ClusterParams()) + ret, err := k8s.Deployments.List(s, params) if err != nil { return err } @@ -45,7 +46,7 @@ func initDeployment() { Net string `help:"Network config, e.g. net1, net1:10.168.222.171"` } R(&createOpt{}, cmdN("create"), "Create deployment resource", func(s *mcclient.ClientSession, args *createOpt) error { - params := jsonutils.NewDict() + params := args.ClusterParams() if len(args.Image) == 0 { return fmt.Errorf("Image must provided") } @@ -74,7 +75,7 @@ func initDeployment() { } params.Add(net, "networkConfig") } - ret, err := k8s.Deployments.CreateInContexts(s, params, args.ClusterContext()) + ret, err := k8s.Deployments.Create(s, params) if err != nil { return err } @@ -87,11 +88,11 @@ func initDeployment() { } R(&getOpt{}, cmdN("show"), "Get deployment details", func(s *mcclient.ClientSession, args *getOpt) error { id := args.NAME - params := jsonutils.NewDict() + params := args.ClusterParams() if args.Namespace != "" { params.Add(jsonutils.NewString(args.Namespace), "namespace") } - ret, err := k8s.Deployments.GetInContexts(s, id, params, args.ClusterContext()) + ret, err := k8s.Deployments.Get(s, id, params) if err != nil { return err } diff --git a/cmd/climc/shell/k8s/k8s.go b/cmd/climc/shell/k8s/k8s.go index 3b8dc9d72c..b48d68e45e 100644 --- a/cmd/climc/shell/k8s/k8s.go +++ b/cmd/climc/shell/k8s/k8s.go @@ -33,8 +33,10 @@ type clusterBaseOptions struct { Cluster string `default:"$K8S_CLUSTER|default" help:"Kubernetes cluster name"` } -func (o clusterBaseOptions) ClusterContext() []modules.ManagerContext { - return []modules.ManagerContext{clusterContext(o.Cluster)} +func (o clusterBaseOptions) ClusterParams() *jsonutils.JSONDict { + ret := jsonutils.NewDict() + ret.Add(jsonutils.NewString(o.Cluster), "cluster") + return ret } type baseListOptions struct { @@ -70,7 +72,7 @@ type resourceGetOptions struct { } func (o resourceGetOptions) ToJSON() *jsonutils.JSONDict { - params := jsonutils.NewDict() + params := o.ClusterParams() if o.Namespace != "" { params.Add(jsonutils.NewString(o.Namespace), "namespace") } diff --git a/cmd/climc/shell/k8s/pods.go b/cmd/climc/shell/k8s/pods.go index 5620609826..5376147feb 100644 --- a/cmd/climc/shell/k8s/pods.go +++ b/cmd/climc/shell/k8s/pods.go @@ -19,7 +19,8 @@ func initPod() { R(&listOpt{}, cmdN("list"), "List k8s pod", func(s *mcclient.ClientSession, args *listOpt) error { params := fetchNamespaceParams(args.namespaceListOptions) params.Update(fetchPagingParams(args.baseListOptions)) - ret, err := k8s.Pods.ListInContexts(s, params, args.ClusterContext()) + params.Update(args.ClusterParams()) + ret, err := k8s.Pods.List(s, params) if err != nil { return err } @@ -32,7 +33,7 @@ func initPod() { } R(&deleteOpt{}, cmdN("delete"), "Delete pod", func(s *mcclient.ClientSession, args *deleteOpt) error { id := args.NAME - ret, err := k8s.Pods.DeleteInContexts(s, id, args.ToJSON(), args.ClusterContext()) + ret, err := k8s.Pods.Delete(s, id, args.ToJSON()) if err != nil { return err } diff --git a/cmd/climc/shell/k8s/raw.go b/cmd/climc/shell/k8s/raw.go index 6aeb500f91..79c6f8537d 100644 --- a/cmd/climc/shell/k8s/raw.go +++ b/cmd/climc/shell/k8s/raw.go @@ -17,7 +17,7 @@ type rawDeleteOpt struct { 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, nil, args.ClusterContext()) + obj, err := k8s.RawResource.Get(s, args.KIND, args.Namespace, args.NAME, args.ClusterParams()) if err != nil { return err } @@ -26,7 +26,7 @@ func initRaw() { }) 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, nil, args.ClusterContext()) + err := k8s.RawResource.Delete(s, args.KIND, args.Namespace, args.NAME, args.ClusterParams()) if err != nil { return err } diff --git a/cmd/climc/shell/k8s/releases.go b/cmd/climc/shell/k8s/releases.go index 179fb199b4..cbbcc52d87 100644 --- a/cmd/climc/shell/k8s/releases.go +++ b/cmd/climc/shell/k8s/releases.go @@ -29,6 +29,7 @@ func initRelease() { R(&listOpt{}, cmdN("list"), "List k8s cluster helm releases", func(s *mcclient.ClientSession, args *listOpt) error { params := fetchNamespaceParams(args.namespaceListOptions) params.Update(fetchPagingParams(args.baseListOptions)) + params.Update(args.ClusterParams()) if args.Filter != "" { params.Add(json.NewString(args.Filter), "filter") } @@ -57,7 +58,7 @@ func initRelease() { if args.Pending { params.Add(json.JSONTrue, "pending") } - ret, err := k8s.Releases.ListInContexts(s, params, args.ClusterContext()) + ret, err := k8s.Releases.List(s, params) if err != nil { return err } @@ -70,7 +71,7 @@ func initRelease() { NAME string `help:"Release instance name"` } R(&showOpt{}, cmdN("show"), "Get helm release details", func(s *mcclient.ClientSession, args *showOpt) error { - ret, err := k8s.Releases.GetInContexts(s, args.NAME, nil, args.ClusterContext()) + ret, err := k8s.Releases.Get(s, args.NAME, args.ClusterParams()) if err != nil { return err } @@ -121,6 +122,7 @@ func initRelease() { if err != nil { return err } + params.Update(args.ClusterParams()) params.Add(json.NewString(args.CHARTNAME), "chart_name") if args.Namespace != "" { params.Add(json.NewString(args.Namespace), "namespace") @@ -128,7 +130,7 @@ func initRelease() { if args.Name != "" { params.Add(json.NewString(args.Name), "release_name") } - ret, err := k8s.Releases.CreateInContexts(s, params, args.ClusterContext()) + ret, err := k8s.Releases.Create(s, params) if err != nil { return err } @@ -149,6 +151,7 @@ func initRelease() { if err != nil { return err } + params.Update(args.ClusterParams()) params.Add(json.NewString(args.CHARTNAME), "chart_name") params.Add(json.NewString(args.NAME), "release_name") if args.ReuseValues { @@ -158,7 +161,7 @@ func initRelease() { params.Add(json.JSONTrue, "reset_values") } - res, err := k8s.Releases.PutInContexts(s, args.NAME, params, args.ClusterContext()) + res, err := k8s.Releases.Put(s, args.NAME, params) if err != nil { return err } @@ -171,7 +174,7 @@ func initRelease() { NAME string `help:"Release instance name"` } R(&deleteOpt{}, cmdN("delete"), "Delete release", func(s *mcclient.ClientSession, args *deleteOpt) error { - _, err := k8s.Releases.DeleteInContexts(s, args.NAME, nil, args.ClusterContext()) + _, err := k8s.Releases.Delete(s, args.NAME, args.ClusterParams()) return err }) } diff --git a/cmd/climc/shell/k8s/service.go b/cmd/climc/shell/k8s/service.go index 3dc22e94c4..8803d17607 100644 --- a/cmd/climc/shell/k8s/service.go +++ b/cmd/climc/shell/k8s/service.go @@ -17,7 +17,8 @@ func initService() { R(&listOpt{}, cmdN("list"), "List k8s service", func(s *mcclient.ClientSession, args *listOpt) error { params := fetchNamespaceParams(args.namespaceListOptions) params.Update(fetchPagingParams(args.baseListOptions)) - ret, err := k8s.Services.ListInContexts(s, params, args.ClusterContext()) + params.Update(args.ClusterParams()) + ret, err := k8s.Services.List(s, params) if err != nil { return err } diff --git a/cmd/climc/shell/k8s/tiller.go b/cmd/climc/shell/k8s/tiller.go index 247e5fba13..610dcb0e5e 100644 --- a/cmd/climc/shell/k8s/tiller.go +++ b/cmd/climc/shell/k8s/tiller.go @@ -28,7 +28,7 @@ func initTiller() { MaxHistory int `json:"history_max"` } R(&createOpt{}, cmdN("create"), "Install helm tiller server to Kubernetes cluster", func(s *mcclient.ClientSession, args *createOpt) error { - params := json.NewDict() + params := args.ClusterParams() if len(args.KubeContext) > 0 { params.Add(json.NewString(args.KubeContext), "kube_context") } @@ -46,7 +46,7 @@ func initTiller() { if args.MaxHistory > 0 { params.Add(json.NewInt(int64(args.MaxHistory)), "history_max") } - ret, err := k8s.Tiller.CreateInContexts(s, params, args.ClusterContext()) + ret, err := k8s.Tiller.Create(s, params) if err != nil { return err } diff --git a/pkg/mcclient/modules/k8s/raw.go b/pkg/mcclient/modules/k8s/raw.go index 8853a18742..1f91f1092a 100644 --- a/pkg/mcclient/modules/k8s/raw.go +++ b/pkg/mcclient/modules/k8s/raw.go @@ -2,13 +2,11 @@ package k8s import ( "fmt" - "net/url" "strings" "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/mcclient" - "yunion.io/x/onecloud/pkg/mcclient/modules" ) var RawResource *RawResourceManager @@ -19,33 +17,23 @@ func init() { } } -type rawResourceContext struct { +type rawResource struct { kind string name string query jsonutils.JSONObject - ctxs []modules.ManagerContext } -func newRawResourceContext(kind, namespace, name string, query jsonutils.JSONObject, ctxs []modules.ManagerContext) *rawResourceContext { +func newRawResource(kind, namespace, name string, query jsonutils.JSONObject) *rawResource { nsQuery := getNamespaceQuery(namespace) if query != nil { nsQuery.Update(query) } - ctx := &rawResourceContext{kind: kind, name: name, query: nsQuery, ctxs: ctxs} + ctx := &rawResource{kind: kind, name: name, query: nsQuery} return ctx } -func (ctx rawResourceContext) contextPath() string { +func (ctx rawResource) path() string { segs := make([]string, 0) - ctxs := ctx.ctxs - if ctxs != nil && len(ctxs) > 0 { - for _, c := range ctxs { - segs = append(segs, c.InstanceManager.KeyString()) - if len(c.InstanceId) > 0 { - segs = append(segs, url.PathEscape(c.InstanceId)) - } - } - } segs = append(segs, "_raw", ctx.kind, ctx.name) path := fmt.Sprintf("/%s", strings.Join(segs, "/")) if ctx.query != nil { @@ -74,22 +62,22 @@ func getNamespaceQuery(namespace string) *jsonutils.JSONDict { return query } -func (m *RawResourceManager) Get(s *mcclient.ClientSession, kind string, namespace string, name string, query jsonutils.JSONObject, ctxs []modules.ManagerContext) (jsonutils.JSONObject, error) { - ctx := newRawResourceContext(kind, namespace, name, query, ctxs) - return m.request(s, "GET", ctx.contextPath(), nil) +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) + return m.request(s, "GET", ctx.path(), nil) } -func (m *RawResourceManager) Put(s *mcclient.ClientSession, kind string, namespace string, name string, body jsonutils.JSONObject, ctxs []modules.ManagerContext) error { +func (m *RawResourceManager) Put(s *mcclient.ClientSession, kind string, namespace string, name string, body jsonutils.JSONObject) error { rawBytes := body.String() newBody := jsonutils.NewDict() newBody.Add(jsonutils.NewString(rawBytes), "raw") - ctx := newRawResourceContext(kind, namespace, name, nil, ctxs) - _, err := m.request(s, "PUT", ctx.contextPath(), newBody) + ctx := newRawResource(kind, namespace, name, nil) + _, 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, ctxs []modules.ManagerContext) error { - ctx := newRawResourceContext(kind, namespace, name, query, ctxs) - _, err := m.request(s, "DELETE", ctx.contextPath(), nil) +func (m *RawResourceManager) Delete(s *mcclient.ClientSession, kind string, namespace string, name string, query jsonutils.JSONObject) error { + ctx := newRawResource(kind, namespace, name, query) + _, err := m.request(s, "DELETE", ctx.path(), nil) return err }