mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
Automatic merge from release/2.3.0 -> release/2.4.0
* commit '314f309b3553dba941e381c63ed9812f21e26845': climc: ingress create
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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()})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user