diff --git a/cmd/climc/shell/k8s/deployment.go b/cmd/climc/shell/k8s/deployment.go index ee001943b8..21e8338e7d 100644 --- a/cmd/climc/shell/k8s/deployment.go +++ b/cmd/climc/shell/k8s/deployment.go @@ -2,6 +2,7 @@ package k8s import ( "fmt" + "io/ioutil" "strconv" "strings" @@ -105,6 +106,31 @@ func initDeployment() { printObjectYAML(ret) return nil }) + + type createFromFileOpt struct { + resourceGetOptions + FILE string `help:"K8s resource YAML or JSON file"` + } + R(&createFromFileOpt{}, "k8s-create", "Create resource by file", func(s *mcclient.ClientSession, args *createFromFileOpt) error { + params := args.ClusterParams() + params.Add(jsonutils.NewString(args.NAME), "name") + + content, err := ioutil.ReadFile(args.FILE) + if err != nil { + return err + } + namespace := args.Namespace + if namespace != "" { + params.Add(jsonutils.NewString(namespace), "namespace") + } + params.Add(jsonutils.NewString(string(content)), "content") + ret, err := k8s.DeployFromFile.Create(s, params) + if err != nil { + return err + } + printObjectYAML(ret) + return nil + }) } type portMapping struct { diff --git a/cmd/climc/shell/k8s/raw.go b/cmd/climc/shell/k8s/raw.go index ac4d6daf52..cebcd968a8 100644 --- a/cmd/climc/shell/k8s/raw.go +++ b/cmd/climc/shell/k8s/raw.go @@ -57,7 +57,10 @@ func initRaw() { if err != nil { return err } - body := jsonutils.Marshal(string(content)) + body, err := jsonutils.Parse(content) + if err != nil { + return err + } 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/deployment.go b/pkg/mcclient/modules/k8s/deployment.go index e62df70244..c72fe53250 100644 --- a/pkg/mcclient/modules/k8s/deployment.go +++ b/pkg/mcclient/modules/k8s/deployment.go @@ -4,15 +4,28 @@ import ( "yunion.io/x/onecloud/pkg/mcclient/modules" ) -var Deployments *DeploymentManager +var ( + Deployments *DeploymentManager + DeployFromFile *DeployFromFileManager +) type DeploymentManager struct { *NamespaceResourceManager } +type DeployFromFileManager struct { + *NamespaceResourceManager +} + func init() { Deployments = &DeploymentManager{ NewNamespaceResourceManager("deployment", "deployments", NewNamespaceCols(), NewColumns())} + + DeployFromFile = &DeployFromFileManager{ + NewNamespaceResourceManager("deployfromfile", "deployfromfiles", + NewNamespaceCols(), NewColumns())} + modules.Register(Deployments) + modules.Register(DeployFromFile) } diff --git a/pkg/mcclient/modules/k8s/raw.go b/pkg/mcclient/modules/k8s/raw.go index d291ab9488..b77db278a8 100644 --- a/pkg/mcclient/modules/k8s/raw.go +++ b/pkg/mcclient/modules/k8s/raw.go @@ -68,10 +68,8 @@ func (m *RawResourceManager) Get(s *mcclient.ClientSession, kind string, namespa } func (m *RawResourceManager) Put(s *mcclient.ClientSession, kind string, namespace string, name string, body jsonutils.JSONObject, cluster string) error { - newBody := jsonutils.NewDict() - newBody.Add(body, "raw") ctx := newRawResource(kind, namespace, name, cluster) - _, err := m.request(s, "PUT", ctx.path(), newBody) + _, err := m.request(s, "PUT", ctx.path(), body) return err }