mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Run should be flexible to type
OpenShift would like to use its own types as generator arguments
This commit is contained in:
parent
2f1edf7db5
commit
32aebc42cc
@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -111,11 +112,6 @@ func Run(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cob
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
client, err := f.Client()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
restartPolicy, err := getRestartPolicy(cmd, interactive)
|
restartPolicy, err := getRestartPolicy(cmd, interactive)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -151,27 +147,36 @@ func Run(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cob
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mapper, typer := f.Object()
|
||||||
|
version, kind, err := typer.ObjectVersionAndKind(obj)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
inline := cmdutil.GetFlagString(cmd, "overrides")
|
inline := cmdutil.GetFlagString(cmd, "overrides")
|
||||||
if len(inline) > 0 {
|
if len(inline) > 0 {
|
||||||
var objType string
|
obj, err = cmdutil.Merge(obj, inline, kind)
|
||||||
if restartPolicy == api.RestartPolicyAlways {
|
|
||||||
objType = "ReplicationController"
|
|
||||||
} else {
|
|
||||||
objType = "Pod"
|
|
||||||
}
|
|
||||||
obj, err = cmdutil.Merge(obj, inline, objType)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mapping, err := mapper.RESTMapping(kind, version)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := f.RESTClient(mapping)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// 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") {
|
||||||
if restartPolicy == api.RestartPolicyAlways {
|
data, err := mapping.Codec.Encode(obj)
|
||||||
obj, err = client.ReplicationControllers(namespace).Create(obj.(*api.ReplicationController))
|
if err != nil {
|
||||||
} else {
|
return err
|
||||||
obj, err = client.Pods(namespace).Create(obj.(*api.Pod))
|
|
||||||
}
|
}
|
||||||
|
obj, err = resource.NewHelper(client, mapping).Create(namespace, false, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -205,10 +210,14 @@ func Run(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cob
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
opts.Client = client
|
opts.Client = client
|
||||||
if restartPolicy == api.RestartPolicyAlways {
|
// TODO: this should be abstracted into Factory to support other types
|
||||||
return handleAttachReplicationController(client, obj.(*api.ReplicationController), opts)
|
switch t := obj.(type) {
|
||||||
} else {
|
case *api.ReplicationController:
|
||||||
return handleAttachPod(client, obj.(*api.Pod), opts)
|
return handleAttachReplicationController(client, t, opts)
|
||||||
|
case *api.Pod:
|
||||||
|
return handleAttachPod(client, t, opts)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("cannot attach to %s: not implemented", kind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return f.PrintObject(cmd, obj, cmdOut)
|
return f.PrintObject(cmd, obj, cmdOut)
|
||||||
|
Loading…
Reference in New Issue
Block a user