mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Merge pull request #7699 from kargakis/make-expose-generic
expose: Create objects in a generic way
This commit is contained in:
commit
82b939760e
@ -20,9 +20,11 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/meta"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
|
||||||
cmdutil "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/resource"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -71,10 +73,10 @@ func NewCmdExposeService(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) error {
|
func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
var name, resource string
|
var name, res string
|
||||||
switch l := len(args); {
|
switch l := len(args); {
|
||||||
case l == 2:
|
case l == 2:
|
||||||
resource, name = args[0], args[1]
|
res, name = args[0], args[1]
|
||||||
default:
|
default:
|
||||||
return cmdutil.UsageError(cmd, "the type and name of a resource to expose are required arguments")
|
return cmdutil.UsageError(cmd, "the type and name of a resource to expose are required arguments")
|
||||||
}
|
}
|
||||||
@ -83,10 +85,6 @@ func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
client, err := f.Client()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
generatorName := cmdutil.GetFlagString(cmd, "generator")
|
generatorName := cmdutil.GetFlagString(cmd, "generator")
|
||||||
|
|
||||||
@ -101,13 +99,14 @@ func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
|
|||||||
} else {
|
} else {
|
||||||
params["name"] = cmdutil.GetFlagString(cmd, "service-name")
|
params["name"] = cmdutil.GetFlagString(cmd, "service-name")
|
||||||
}
|
}
|
||||||
|
var mapping *meta.RESTMapping
|
||||||
if s, found := params["selector"]; !found || len(s) == 0 || cmdutil.GetFlagInt(cmd, "port") < 1 {
|
if s, found := params["selector"]; !found || len(s) == 0 || cmdutil.GetFlagInt(cmd, "port") < 1 {
|
||||||
mapper, _ := f.Object()
|
mapper, _ := f.Object()
|
||||||
v, k, err := mapper.VersionAndKindForResource(resource)
|
v, k, err := mapper.VersionAndKindForResource(res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
mapping, err := mapper.RESTMapping(k, v)
|
mapping, err = mapper.RESTMapping(k, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -118,7 +117,14 @@ func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
|
|||||||
}
|
}
|
||||||
params["selector"] = s
|
params["selector"] = s
|
||||||
}
|
}
|
||||||
if cmdutil.GetFlagInt(cmd, "port") < 0 {
|
noPorts := true
|
||||||
|
for _, param := range names {
|
||||||
|
if param.Name == "port" {
|
||||||
|
noPorts = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if cmdutil.GetFlagInt(cmd, "port") < 0 && !noPorts {
|
||||||
ports, err := f.PortsForResource(mapping, namespace, name)
|
ports, err := f.PortsForResource(mapping, namespace, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -141,14 +147,14 @@ func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
service, err := generator.Generate(params)
|
object, err := generator.Generate(params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
inline := cmdutil.GetFlagString(cmd, "overrides")
|
inline := cmdutil.GetFlagString(cmd, "overrides")
|
||||||
if len(inline) > 0 {
|
if len(inline) > 0 {
|
||||||
service, err = cmdutil.Merge(service, inline, "Service")
|
object, err = cmdutil.Merge(object, inline, mapping.Kind)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -156,11 +162,21 @@ func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
|
|||||||
|
|
||||||
// TODO: extract this flag to a central location, when such a location exists.
|
// TODO: extract this flag to a central location, when such a location exists.
|
||||||
if !cmdutil.GetFlagBool(cmd, "dry-run") {
|
if !cmdutil.GetFlagBool(cmd, "dry-run") {
|
||||||
service, err = client.Services(namespace).Create(service.(*api.Service))
|
mapper, typer := f.Object()
|
||||||
|
resourceMapper := &resource.Mapper{typer, mapper, f.ClientMapperForCommand()}
|
||||||
|
info, err := resourceMapper.InfoForObject(object)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
data, err := info.Mapping.Codec.Encode(object)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = resource.NewHelper(info.Client, info.Mapping).Create(namespace, false, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return f.PrintObject(cmd, service, out)
|
return f.PrintObject(cmd, object, out)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user