Automatic merge from release/2.3.0 -> release/2.4.0

* commit '314f309b3553dba941e381c63ed9812f21e26845':
  climc: ingress create
This commit is contained in:
李泽玺
2018-11-29 23:55:15 +08:00
4 changed files with 89 additions and 7 deletions
+17 -1
View File
@@ -1,9 +1,25 @@
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() {
initK8sNamespaceResource("ingress", k8s.Ingresses)
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)
}
+37 -5
View File
@@ -3,6 +3,8 @@ package k8s
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"yunion.io/x/jsonutils"
@@ -11,23 +13,23 @@ import (
o "yunion.io/x/onecloud/pkg/mcclient/options/k8s"
)
type rawOpt struct {
type RawOpt struct {
o.NamespaceWithClusterOptions
KIND string `help:"resource kind"`
NAME string `help:"instance name"`
}
type rawGetOpt struct {
rawOpt
RawOpt
Output string `help:"Output format" short-token:"o" default:"yaml" choices:"json|yaml"`
}
type rawDeleteOpt struct {
rawOpt
RawOpt
}
type rawPutOpt struct {
rawOpt
RawOpt
File string `help:"Resource json description file" short-token:"f"`
}
@@ -53,7 +55,7 @@ func initRaw() {
return nil
})
R(&rawPutOpt{}, "k8s-put", "Update k8s resource instance", func(s *mcclient.ClientSession, args *rawPutOpt) error {
doPut := func(s *mcclient.ClientSession, args *rawPutOpt) error {
content, err := ioutil.ReadFile(args.File)
if err != nil {
return err
@@ -67,5 +69,35 @@ func initRaw() {
return err
}
return nil
}
R(&rawPutOpt{}, "k8s-put", "Update k8s resource instance", func(s *mcclient.ClientSession, args *rawPutOpt) error {
return doPut(s, args)
})
R(&RawOpt{}, "k8s-edit", "Edit k8s resource instance", func(s *mcclient.ClientSession, args *RawOpt) error {
obj, err := k8s.RawResource.Get(s, args.KIND, args.Namespace, args.NAME, args.Cluster)
if err != nil {
return err
}
tempfile, err := ioutil.TempFile("", fmt.Sprintf("k8s-%s-%s.json", args.KIND, args.NAME))
if err != nil {
return err
}
defer os.Remove(tempfile.Name())
if _, err := tempfile.Write([]byte(obj.PrettyString())); 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
}
return doPut(s, &rawPutOpt{RawOpt: *args, File: tempfile.Name()})
})
}
+1 -1
View File
@@ -29,7 +29,7 @@ func initSecret() {
registryCmd := initK8sNamespaceResource("registrysecret", k8s.RegistrySecrets)
createCmd := NewCommand(
&o.RegistrySecretCreateOptions{},
resourceCmdN("registrysecret", "create"),
registryCmd.CommandNameFactory("create"),
"Create docker registry secret resource",
func(s *mcclient.ClientSession, args *o.RegistrySecretCreateOptions) error {
params, err := args.Params()
+34
View File
@@ -0,0 +1,34 @@
package k8s
import (
"yunion.io/x/jsonutils"
)
type IngressCreateOptions struct {
NamespaceWithClusterOptions
NAME string `help:"Name of ingress"`
SERVICE string `help:"Service name"`
PORT int `help:"Service port"`
Path string `help:"HTTP path"`
Host string `help:"Fuly qualified domain name of a network host" required:"true"`
}
func (o IngressCreateOptions) Params() *jsonutils.JSONDict {
params := o.NamespaceWithClusterOptions.Params()
params.Add(jsonutils.NewString(o.NAME), "name")
path := jsonutils.NewDict()
path.Add(jsonutils.NewString(o.SERVICE), "backend", "serviceName")
path.Add(jsonutils.NewInt(int64(o.PORT)), "backend", "servicePort")
if o.Path != "" {
path.Add(jsonutils.NewString(o.Path), "path")
}
paths := jsonutils.NewArray()
paths.Add(path)
rule := jsonutils.NewDict()
rule.Add(paths, "http", "paths")
rule.Add(jsonutils.NewString(o.Host), "host")
rules := jsonutils.NewArray()
rules.Add(rule)
params.Add(rules, "rules")
return params
}