mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
Merge pull request #33180 from AdoHe/refactory_interface
Automatic merge from submit-queue refact kubectl Factory make it interface refactor kubectl to make Factory interface. @kubernetes/kubectl
This commit is contained in:
commit
9b3ca2fb0d
@ -26,7 +26,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util/flag"
|
"k8s.io/kubernetes/pkg/util/flag"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewKubeadmCommand(f *cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command {
|
func NewKubeadmCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command {
|
||||||
cmds := &cobra.Command{
|
cmds := &cobra.Command{
|
||||||
Use: "kubeadm",
|
Use: "kubeadm",
|
||||||
Short: "kubeadm: easily bootstrap a secure Kubernetes cluster.",
|
Short: "kubeadm: easily bootstrap a secure Kubernetes cluster.",
|
||||||
|
@ -54,7 +54,7 @@ type AnnotateOptions struct {
|
|||||||
newAnnotations map[string]string
|
newAnnotations map[string]string
|
||||||
removeAnnotations []string
|
removeAnnotations []string
|
||||||
|
|
||||||
// Common shared fields
|
// Common share fields
|
||||||
out io.Writer
|
out io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ var (
|
|||||||
kubectl annotate pods foo description-`)
|
kubectl annotate pods foo description-`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdAnnotate(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdAnnotate(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &AnnotateOptions{}
|
options := &AnnotateOptions{}
|
||||||
|
|
||||||
// retrieve a list of handled resources from printer as valid args
|
// retrieve a list of handled resources from printer as valid args
|
||||||
@ -138,7 +138,7 @@ func NewCmdAnnotate(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete adapts from the command line args and factory to the data required.
|
// Complete adapts from the command line args and factory to the data required.
|
||||||
func (o *AnnotateOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
func (o *AnnotateOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
||||||
o.out = out
|
o.out = out
|
||||||
o.local = cmdutil.GetFlagBool(cmd, "local")
|
o.local = cmdutil.GetFlagBool(cmd, "local")
|
||||||
o.overwrite = cmdutil.GetFlagBool(cmd, "overwrite")
|
o.overwrite = cmdutil.GetFlagBool(cmd, "overwrite")
|
||||||
@ -172,7 +172,7 @@ func (o AnnotateOptions) Validate() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunAnnotate does the work
|
// RunAnnotate does the work
|
||||||
func (o AnnotateOptions) RunAnnotate(f *cmdutil.Factory, cmd *cobra.Command) error {
|
func (o AnnotateOptions) RunAnnotate(f cmdutil.Factory, cmd *cobra.Command) error {
|
||||||
namespace, enforceNamespace, err := f.DefaultNamespace()
|
namespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -28,7 +28,7 @@ import (
|
|||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdApiVersions(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdApiVersions(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "api-versions",
|
Use: "api-versions",
|
||||||
// apiversions is deprecated.
|
// apiversions is deprecated.
|
||||||
@ -42,7 +42,7 @@ func NewCmdApiVersions(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunApiVersions(f *cmdutil.Factory, w io.Writer) error {
|
func RunApiVersions(f cmdutil.Factory, w io.Writer) error {
|
||||||
if len(os.Args) > 1 && os.Args[1] == "apiversions" {
|
if len(os.Args) > 1 && os.Args[1] == "apiversions" {
|
||||||
printDeprecationWarning("api-versions", "apiversions")
|
printDeprecationWarning("api-versions", "apiversions")
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ var (
|
|||||||
cat pod.json | kubectl apply -f -`)
|
cat pod.json | kubectl apply -f -`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdApply(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdApply(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
var options ApplyOptions
|
var options ApplyOptions
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -122,7 +122,7 @@ func validatePruneAll(prune, all bool, selector string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunApply(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *ApplyOptions) error {
|
func RunApply(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *ApplyOptions) error {
|
||||||
shortOutput := cmdutil.GetFlagString(cmd, "output") == "name"
|
shortOutput := cmdutil.GetFlagString(cmd, "output") == "name"
|
||||||
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -48,7 +48,7 @@ var (
|
|||||||
kubectl attach 123456-7890 -c ruby-container -i -t`)
|
kubectl attach 123456-7890 -c ruby-container -i -t`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdAttach(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) *cobra.Command {
|
func NewCmdAttach(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) *cobra.Command {
|
||||||
options := &AttachOptions{
|
options := &AttachOptions{
|
||||||
StreamOptions: StreamOptions{
|
StreamOptions: StreamOptions{
|
||||||
In: cmdIn,
|
In: cmdIn,
|
||||||
@ -113,7 +113,7 @@ type AttachOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete verifies command line arguments and loads data from the command environment
|
// Complete verifies command line arguments and loads data from the command environment
|
||||||
func (p *AttachOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, argsIn []string) error {
|
func (p *AttachOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, argsIn []string) error {
|
||||||
if len(argsIn) == 0 {
|
if len(argsIn) == 0 {
|
||||||
return cmdutil.UsageError(cmd, "POD is required for attach")
|
return cmdutil.UsageError(cmd, "POD is required for attach")
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ var (
|
|||||||
kubectl autoscale rc foo --max=5 --cpu-percent=80`)
|
kubectl autoscale rc foo --max=5 --cpu-percent=80`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdAutoscale(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdAutoscale(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
validArgs := []string{"deployment", "replicaset", "replicationcontroller"}
|
validArgs := []string{"deployment", "replicaset", "replicationcontroller"}
|
||||||
@ -79,7 +79,7 @@ func NewCmdAutoscale(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunAutoscale(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
func RunAutoscale(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
||||||
namespace, enforceNamespace, err := f.DefaultNamespace()
|
namespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -33,7 +33,7 @@ import (
|
|||||||
var longDescr = `Display addresses of the master and services with label kubernetes.io/cluster-service=true
|
var longDescr = `Display addresses of the master and services with label kubernetes.io/cluster-service=true
|
||||||
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.`
|
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.`
|
||||||
|
|
||||||
func NewCmdClusterInfo(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdClusterInfo(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "cluster-info",
|
Use: "cluster-info",
|
||||||
// clusterinfo is deprecated.
|
// clusterinfo is deprecated.
|
||||||
@ -50,7 +50,7 @@ func NewCmdClusterInfo(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunClusterInfo(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command) error {
|
func RunClusterInfo(f cmdutil.Factory, out io.Writer, cmd *cobra.Command) error {
|
||||||
if len(os.Args) > 1 && os.Args[1] == "clusterinfo" {
|
if len(os.Args) > 1 && os.Args[1] == "clusterinfo" {
|
||||||
printDeprecationWarning("cluster-info", "clusterinfo")
|
printDeprecationWarning("cluster-info", "clusterinfo")
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateSecret groups subcommands to create various types of secrets
|
// NewCmdCreateSecret groups subcommands to create various types of secrets
|
||||||
func NewCmdClusterInfoDump(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdClusterInfoDump(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "dump",
|
Use: "dump",
|
||||||
Short: "Dump lots of relevant info for debugging and diagnosis",
|
Short: "Dump lots of relevant info for debugging and diagnosis",
|
||||||
@ -84,7 +84,7 @@ func setupOutputWriter(cmd *cobra.Command, defaultWriter io.Writer, filename str
|
|||||||
return file
|
return file
|
||||||
}
|
}
|
||||||
|
|
||||||
func dumpClusterInfo(f *cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
func dumpClusterInfo(f cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
||||||
clientset, err := f.ClientSet()
|
clientset, err := f.ClientSet()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -224,7 +224,7 @@ Use "{{.CommandPath}} [command] --help" for more information about a command.{{e
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewKubectlCommand creates the `kubectl` command and its nested children.
|
// NewKubectlCommand creates the `kubectl` command and its nested children.
|
||||||
func NewKubectlCommand(f *cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command {
|
func NewKubectlCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command {
|
||||||
// Parent command to which all subcommands are added.
|
// Parent command to which all subcommands are added.
|
||||||
cmds := &cobra.Command{
|
cmds := &cobra.Command{
|
||||||
Use: "kubectl",
|
Use: "kubectl",
|
||||||
|
@ -28,6 +28,10 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/emicklei/go-restful/swagger"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
@ -210,7 +214,12 @@ type testFactory struct {
|
|||||||
Err error
|
Err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec, runtime.NegotiatedSerializer) {
|
type fakeFactory struct {
|
||||||
|
tf *testFactory
|
||||||
|
Codec runtime.Codec
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewTestFactory() (cmdutil.Factory, *testFactory, runtime.Codec, runtime.NegotiatedSerializer) {
|
||||||
scheme, mapper, codec := newExternalScheme()
|
scheme, mapper, codec := newExternalScheme()
|
||||||
t := &testFactory{
|
t := &testFactory{
|
||||||
Validator: validation.NullSchema{},
|
Validator: validation.NullSchema{},
|
||||||
@ -220,10 +229,19 @@ func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec, runtime.Ne
|
|||||||
negotiatedSerializer := serializer.NegotiatedSerializerWrapper(
|
negotiatedSerializer := serializer.NegotiatedSerializerWrapper(
|
||||||
runtime.SerializerInfo{Serializer: codec},
|
runtime.SerializerInfo{Serializer: codec},
|
||||||
runtime.StreamSerializerInfo{})
|
runtime.StreamSerializerInfo{})
|
||||||
return &cmdutil.Factory{
|
return &fakeFactory{
|
||||||
Object: func() (meta.RESTMapper, runtime.ObjectTyper) {
|
tf: t,
|
||||||
|
Codec: codec,
|
||||||
|
}, t, codec, negotiatedSerializer
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) FlagSet() *pflag.FlagSet {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) {
|
||||||
priorityRESTMapper := meta.PriorityRESTMapper{
|
priorityRESTMapper := meta.PriorityRESTMapper{
|
||||||
Delegate: t.Mapper,
|
Delegate: f.tf.Mapper,
|
||||||
ResourcePriority: []unversioned.GroupVersionResource{
|
ResourcePriority: []unversioned.GroupVersionResource{
|
||||||
{Group: meta.AnyGroup, Version: "v1", Resource: meta.AnyResource},
|
{Group: meta.AnyGroup, Version: "v1", Resource: meta.AnyResource},
|
||||||
},
|
},
|
||||||
@ -231,41 +249,176 @@ func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec, runtime.Ne
|
|||||||
{Group: meta.AnyGroup, Version: "v1", Kind: meta.AnyKind},
|
{Group: meta.AnyGroup, Version: "v1", Kind: meta.AnyKind},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return priorityRESTMapper, t.Typer
|
return priorityRESTMapper, f.tf.Typer
|
||||||
},
|
|
||||||
ClientForMapping: func(*meta.RESTMapping) (resource.RESTClient, error) {
|
|
||||||
return t.Client, t.Err
|
|
||||||
},
|
|
||||||
Decoder: func(bool) runtime.Decoder {
|
|
||||||
return codec
|
|
||||||
},
|
|
||||||
JSONEncoder: func() runtime.Encoder {
|
|
||||||
return codec
|
|
||||||
},
|
|
||||||
Describer: func(*meta.RESTMapping) (kubectl.Describer, error) {
|
|
||||||
return t.Describer, t.Err
|
|
||||||
},
|
|
||||||
Printer: func(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) {
|
|
||||||
return t.Printer, t.Err
|
|
||||||
},
|
|
||||||
Validator: func(validate bool, cacheDir string) (validation.Schema, error) {
|
|
||||||
return t.Validator, t.Err
|
|
||||||
},
|
|
||||||
DefaultNamespace: func() (string, bool, error) {
|
|
||||||
return t.Namespace, false, t.Err
|
|
||||||
},
|
|
||||||
ClientConfig: func() (*restclient.Config, error) {
|
|
||||||
return t.ClientConfig, t.Err
|
|
||||||
},
|
|
||||||
}, t, codec, negotiatedSerializer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMixedFactory(apiClient resource.RESTClient) (*cmdutil.Factory, *testFactory, runtime.Codec) {
|
func (f *fakeFactory) UnstructuredObject() (meta.RESTMapper, runtime.ObjectTyper, error) {
|
||||||
f, t, c, _ := NewTestFactory()
|
return nil, nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Decoder(bool) runtime.Decoder {
|
||||||
|
return f.Codec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) JSONEncoder() runtime.Encoder {
|
||||||
|
return f.Codec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) RESTClient() (*restclient.RESTClient, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) ClientSet() (*internalclientset.Clientset, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) ClientConfig() (*restclient.Config, error) {
|
||||||
|
return f.tf.ClientConfig, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) ClientForMapping(*meta.RESTMapping) (resource.RESTClient, error) {
|
||||||
|
return f.tf.Client, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) UnstructuredClientForMapping(*meta.RESTMapping) (resource.RESTClient, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Describer(*meta.RESTMapping) (kubectl.Describer, error) {
|
||||||
|
return f.tf.Describer, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Printer(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) {
|
||||||
|
return f.tf.Printer, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Scaler(*meta.RESTMapping) (kubectl.Scaler, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Reaper(*meta.RESTMapping) (kubectl.Reaper, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) HistoryViewer(*meta.RESTMapping) (kubectl.HistoryViewer, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Rollbacker(*meta.RESTMapping) (kubectl.Rollbacker, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) StatusViewer(*meta.RESTMapping) (kubectl.StatusViewer, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) MapBasedSelectorForObject(runtime.Object) (string, error) {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) PortsForObject(runtime.Object) ([]string, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) ProtocolsForObject(runtime.Object) (map[string]string, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) LabelsForObject(runtime.Object) (map[string]string, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) LogsForObject(object, options runtime.Object) (*restclient.Request, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) PauseObject(runtime.Object) (bool, error) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) ResumeObject(runtime.Object) (bool, error) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Validator(validate bool, cacheDir string) (validation.Schema, error) {
|
||||||
|
return f.tf.Validator, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) SwaggerSchema(unversioned.GroupVersionKind) (*swagger.ApiDeclaration, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) DefaultNamespace() (string, bool, error) {
|
||||||
|
return f.tf.Namespace, false, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Generators(string) map[string]kubectl.Generator {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) CanBeExposed(unversioned.GroupKind) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) CanBeAutoscaled(unversioned.GroupKind) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) AttachablePodForObject(ob runtime.Object) (*api.Pod, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) UpdatePodSpecForObject(obj runtime.Object, fn func(*api.PodSpec) error) (bool, error) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) EditorEnvs() []string {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) PrintObjectSpecificMessage(obj runtime.Object, out io.Writer) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) Command() string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) BindFlags(flags *pflag.FlagSet) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) BindExternalFlags(flags *pflag.FlagSet) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) PrintObject(cmd *cobra.Command, mapper meta.RESTMapper, obj runtime.Object, out io.Writer) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error) {
|
||||||
|
return f.tf.Printer, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) NewBuilder() *resource.Builder {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) DefaultResourceFilterOptions(cmd *cobra.Command, withNamespace bool) *kubectl.PrintOptions {
|
||||||
|
return &kubectl.PrintOptions{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeFactory) DefaultResourceFilterFunc() kubectl.Filters {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type fakeMixedFactory struct {
|
||||||
|
cmdutil.Factory
|
||||||
|
tf *testFactory
|
||||||
|
apiClient resource.RESTClient
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeMixedFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) {
|
||||||
var multiRESTMapper meta.MultiRESTMapper
|
var multiRESTMapper meta.MultiRESTMapper
|
||||||
multiRESTMapper = append(multiRESTMapper, t.Mapper)
|
multiRESTMapper = append(multiRESTMapper, f.tf.Mapper)
|
||||||
multiRESTMapper = append(multiRESTMapper, testapi.Default.RESTMapper())
|
multiRESTMapper = append(multiRESTMapper, testapi.Default.RESTMapper())
|
||||||
f.Object = func() (meta.RESTMapper, runtime.ObjectTyper) {
|
|
||||||
priorityRESTMapper := meta.PriorityRESTMapper{
|
priorityRESTMapper := meta.PriorityRESTMapper{
|
||||||
Delegate: multiRESTMapper,
|
Delegate: multiRESTMapper,
|
||||||
ResourcePriority: []unversioned.GroupVersionResource{
|
ResourcePriority: []unversioned.GroupVersionResource{
|
||||||
@ -275,86 +428,95 @@ func NewMixedFactory(apiClient resource.RESTClient) (*cmdutil.Factory, *testFact
|
|||||||
{Group: meta.AnyGroup, Version: "v1", Kind: meta.AnyKind},
|
{Group: meta.AnyGroup, Version: "v1", Kind: meta.AnyKind},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return priorityRESTMapper, runtime.MultiObjectTyper{t.Typer, api.Scheme}
|
return priorityRESTMapper, runtime.MultiObjectTyper{f.tf.Typer, api.Scheme}
|
||||||
}
|
|
||||||
f.ClientForMapping = func(m *meta.RESTMapping) (resource.RESTClient, error) {
|
|
||||||
if m.ObjectConvertor == api.Scheme {
|
|
||||||
return apiClient, t.Err
|
|
||||||
}
|
|
||||||
return t.Client, t.Err
|
|
||||||
}
|
|
||||||
return f, t, c
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAPIFactory() (*cmdutil.Factory, *testFactory, runtime.Codec, runtime.NegotiatedSerializer) {
|
func (f *fakeMixedFactory) ClientForMapping(m *meta.RESTMapping) (resource.RESTClient, error) {
|
||||||
t := &testFactory{
|
if m.ObjectConvertor == api.Scheme {
|
||||||
Validator: validation.NullSchema{},
|
return f.apiClient, f.tf.Err
|
||||||
}
|
}
|
||||||
|
return f.tf.Client, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
f := &cmdutil.Factory{
|
func NewMixedFactory(apiClient resource.RESTClient) (cmdutil.Factory, *testFactory, runtime.Codec) {
|
||||||
Object: func() (meta.RESTMapper, runtime.ObjectTyper) {
|
f, t, c, _ := NewTestFactory()
|
||||||
|
return &fakeMixedFactory{
|
||||||
|
Factory: f,
|
||||||
|
tf: t,
|
||||||
|
apiClient: apiClient,
|
||||||
|
}, t, c
|
||||||
|
}
|
||||||
|
|
||||||
|
type fakeAPIFactory struct {
|
||||||
|
cmdutil.Factory
|
||||||
|
tf *testFactory
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) {
|
||||||
return testapi.Default.RESTMapper(), api.Scheme
|
return testapi.Default.RESTMapper(), api.Scheme
|
||||||
},
|
}
|
||||||
UnstructuredObject: func() (meta.RESTMapper, runtime.ObjectTyper, error) {
|
|
||||||
|
func (f *fakeAPIFactory) UnstructuredObject() (meta.RESTMapper, runtime.ObjectTyper, error) {
|
||||||
groupResources := testDynamicResources()
|
groupResources := testDynamicResources()
|
||||||
mapper := discovery.NewRESTMapper(groupResources, meta.InterfacesForUnstructured)
|
mapper := discovery.NewRESTMapper(groupResources, meta.InterfacesForUnstructured)
|
||||||
typer := discovery.NewUnstructuredObjectTyper(groupResources)
|
typer := discovery.NewUnstructuredObjectTyper(groupResources)
|
||||||
|
|
||||||
return cmdutil.NewShortcutExpander(mapper, nil), typer, nil
|
return cmdutil.NewShortcutExpander(mapper, nil), typer, nil
|
||||||
},
|
}
|
||||||
ClientSet: func() (*internalclientset.Clientset, error) {
|
|
||||||
|
func (f *fakeAPIFactory) Decoder(bool) runtime.Decoder {
|
||||||
|
return testapi.Default.Codec()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) JSONEncoder() runtime.Encoder {
|
||||||
|
return testapi.Default.Codec()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) ClientSet() (*internalclientset.Clientset, error) {
|
||||||
// Swap out the HTTP client out of the client with the fake's version.
|
// Swap out the HTTP client out of the client with the fake's version.
|
||||||
fakeClient := t.Client.(*fake.RESTClient)
|
fakeClient := f.tf.Client.(*fake.RESTClient)
|
||||||
restClient, err := restclient.RESTClientFor(t.ClientConfig)
|
restClient, err := restclient.RESTClientFor(f.tf.ClientConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
restClient.Client = fakeClient.Client
|
restClient.Client = fakeClient.Client
|
||||||
return internalclientset.New(restClient), t.Err
|
return internalclientset.New(restClient), f.tf.Err
|
||||||
},
|
}
|
||||||
RESTClient: func() (*restclient.RESTClient, error) {
|
|
||||||
|
func (f *fakeAPIFactory) RESTClient() (*restclient.RESTClient, error) {
|
||||||
// Swap out the HTTP client out of the client with the fake's version.
|
// Swap out the HTTP client out of the client with the fake's version.
|
||||||
fakeClient := t.Client.(*fake.RESTClient)
|
fakeClient := f.tf.Client.(*fake.RESTClient)
|
||||||
restClient, err := restclient.RESTClientFor(t.ClientConfig)
|
restClient, err := restclient.RESTClientFor(f.tf.ClientConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
restClient.Client = fakeClient.Client
|
restClient.Client = fakeClient.Client
|
||||||
return restClient, t.Err
|
return restClient, f.tf.Err
|
||||||
},
|
}
|
||||||
ClientForMapping: func(*meta.RESTMapping) (resource.RESTClient, error) {
|
|
||||||
return t.Client, t.Err
|
func (f *fakeAPIFactory) ClientConfig() (*restclient.Config, error) {
|
||||||
},
|
return f.tf.ClientConfig, f.tf.Err
|
||||||
UnstructuredClientForMapping: func(*meta.RESTMapping) (resource.RESTClient, error) {
|
}
|
||||||
return t.Client, t.Err
|
|
||||||
},
|
func (f *fakeAPIFactory) ClientForMapping(*meta.RESTMapping) (resource.RESTClient, error) {
|
||||||
Decoder: func(bool) runtime.Decoder {
|
return f.tf.Client, f.tf.Err
|
||||||
return testapi.Default.Codec()
|
}
|
||||||
},
|
|
||||||
JSONEncoder: func() runtime.Encoder {
|
func (f *fakeAPIFactory) UnstructuredClientForMapping(*meta.RESTMapping) (resource.RESTClient, error) {
|
||||||
return testapi.Default.Codec()
|
return f.tf.Client, f.tf.Err
|
||||||
},
|
}
|
||||||
Describer: func(*meta.RESTMapping) (kubectl.Describer, error) {
|
|
||||||
return t.Describer, t.Err
|
func (f *fakeAPIFactory) Describer(*meta.RESTMapping) (kubectl.Describer, error) {
|
||||||
},
|
return f.tf.Describer, f.tf.Err
|
||||||
Printer: func(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) {
|
}
|
||||||
return t.Printer, t.Err
|
|
||||||
},
|
func (f *fakeAPIFactory) Printer(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) {
|
||||||
Validator: func(validate bool, cacheDir string) (validation.Schema, error) {
|
return f.tf.Printer, f.tf.Err
|
||||||
return t.Validator, t.Err
|
}
|
||||||
},
|
|
||||||
DefaultNamespace: func() (string, bool, error) {
|
func (f *fakeAPIFactory) LogsForObject(object, options runtime.Object) (*restclient.Request, error) {
|
||||||
return t.Namespace, false, t.Err
|
fakeClient := f.tf.Client.(*fake.RESTClient)
|
||||||
},
|
c := client.NewOrDie(f.tf.ClientConfig)
|
||||||
ClientConfig: func() (*restclient.Config, error) {
|
|
||||||
return t.ClientConfig, t.Err
|
|
||||||
},
|
|
||||||
Generators: func(cmdName string) map[string]kubectl.Generator {
|
|
||||||
return cmdutil.DefaultGenerators(cmdName)
|
|
||||||
},
|
|
||||||
LogsForObject: func(object, options runtime.Object) (*restclient.Request, error) {
|
|
||||||
fakeClient := t.Client.(*fake.RESTClient)
|
|
||||||
c := client.NewOrDie(t.ClientConfig)
|
|
||||||
c.Client = fakeClient.Client
|
c.Client = fakeClient.Client
|
||||||
|
|
||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
@ -363,7 +525,7 @@ func NewAPIFactory() (*cmdutil.Factory, *testFactory, runtime.Codec, runtime.Neg
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("provided options object is not a PodLogOptions")
|
return nil, errors.New("provided options object is not a PodLogOptions")
|
||||||
}
|
}
|
||||||
return c.Pods(t.Namespace).GetLogs(t.Name, opts), nil
|
return c.Pods(f.tf.Namespace).GetLogs(t.Name, opts), nil
|
||||||
default:
|
default:
|
||||||
fqKinds, _, err := api.Scheme.ObjectKinds(object)
|
fqKinds, _, err := api.Scheme.ObjectKinds(object)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -371,16 +533,57 @@ func NewAPIFactory() (*cmdutil.Factory, *testFactory, runtime.Codec, runtime.Neg
|
|||||||
}
|
}
|
||||||
return nil, fmt.Errorf("cannot get the logs from %v", fqKinds[0])
|
return nil, fmt.Errorf("cannot get the logs from %v", fqKinds[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) Validator(validate bool, cacheDir string) (validation.Schema, error) {
|
||||||
|
return f.tf.Validator, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) DefaultNamespace() (string, bool, error) {
|
||||||
|
return f.tf.Namespace, false, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) Generators(cmdName string) map[string]kubectl.Generator {
|
||||||
|
return cmdutil.DefaultGenerators(cmdName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) PrintObject(cmd *cobra.Command, mapper meta.RESTMapper, obj runtime.Object, out io.Writer) error {
|
||||||
|
gvks, _, err := api.Scheme.ObjectKinds(obj)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
mapping, err := mapper.RESTMapping(gvks[0].GroupKind())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
printer, err := f.PrinterForMapping(cmd, mapping, false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return printer.PrintObj(obj, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error) {
|
||||||
|
return f.tf.Printer, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) NewBuilder() *resource.Builder {
|
||||||
|
mapper, typer := f.Object()
|
||||||
|
|
||||||
|
return resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true))
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAPIFactory() (cmdutil.Factory, *testFactory, runtime.Codec, runtime.NegotiatedSerializer) {
|
||||||
|
t := &testFactory{
|
||||||
|
Validator: validation.NullSchema{},
|
||||||
}
|
}
|
||||||
rf := cmdutil.NewFactory(nil)
|
rf := cmdutil.NewFactory(nil)
|
||||||
f.MapBasedSelectorForObject = rf.MapBasedSelectorForObject
|
return &fakeAPIFactory{
|
||||||
f.PortsForObject = rf.PortsForObject
|
Factory: rf,
|
||||||
f.ProtocolsForObject = rf.ProtocolsForObject
|
tf: t,
|
||||||
f.LabelsForObject = rf.LabelsForObject
|
}, t, testapi.Default.Codec(), testapi.Default.NegotiatedSerializer()
|
||||||
f.CanBeExposed = rf.CanBeExposed
|
|
||||||
f.PrintObjectSpecificMessage = rf.PrintObjectSpecificMessage
|
|
||||||
return f, t, testapi.Default.Codec(), testapi.Default.NegotiatedSerializer()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func objBody(codec runtime.Codec, obj runtime.Object) io.ReadCloser {
|
func objBody(codec runtime.Codec, obj runtime.Object) io.ReadCloser {
|
||||||
|
@ -56,7 +56,7 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdCompletion(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdCompletion(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
shells := []string{}
|
shells := []string{}
|
||||||
for s := range completion_shells {
|
for s := range completion_shells {
|
||||||
shells = append(shells, s)
|
shells = append(shells, s)
|
||||||
@ -77,7 +77,7 @@ func NewCmdCompletion(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunCompletion(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) error {
|
func RunCompletion(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return cmdutil.UsageError(cmd, "Shell not specified.")
|
return cmdutil.UsageError(cmd, "Shell not specified.")
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ var (
|
|||||||
|
|
||||||
// NewCmdConvert creates a command object for the generic "convert" action, which
|
// NewCmdConvert creates a command object for the generic "convert" action, which
|
||||||
// translates the config file into a given version.
|
// translates the config file into a given version.
|
||||||
func NewCmdConvert(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdConvert(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &ConvertOptions{}
|
options := &ConvertOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -103,7 +103,7 @@ type ConvertOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete collects information required to run Convert command from command line.
|
// Complete collects information required to run Convert command from command line.
|
||||||
func (o *ConvertOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
func (o *ConvertOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
||||||
o.outputVersion, err = cmdutil.OutputVersion(cmd, ®istered.EnabledVersionsForGroup(api.GroupName)[0])
|
o.outputVersion, err = cmdutil.OutputVersion(cmd, ®istered.EnabledVersionsForGroup(api.GroupName)[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -43,7 +43,7 @@ var (
|
|||||||
cat pod.json | kubectl create -f -`)
|
cat pod.json | kubectl create -f -`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdCreate(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdCreate(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -89,7 +89,7 @@ func ValidateArgs(cmd *cobra.Command, args []string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunCreate(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *resource.FilenameOptions) error {
|
func RunCreate(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *resource.FilenameOptions) error {
|
||||||
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -183,7 +183,7 @@ type CreateSubcommandOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunCreateSubcommand executes a create subcommand using the specified options
|
// RunCreateSubcommand executes a create subcommand using the specified options
|
||||||
func RunCreateSubcommand(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *CreateSubcommandOptions) error {
|
func RunCreateSubcommand(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *CreateSubcommandOptions) error {
|
||||||
namespace, _, err := f.DefaultNamespace()
|
namespace, _, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -53,7 +53,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ConfigMap is a command to ease creating ConfigMaps.
|
// ConfigMap is a command to ease creating ConfigMaps.
|
||||||
func NewCmdCreateConfigMap(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateConfigMap(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]",
|
Use: "configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]",
|
||||||
Aliases: []string{"cm"},
|
Aliases: []string{"cm"},
|
||||||
@ -75,7 +75,7 @@ func NewCmdCreateConfigMap(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateConfigMap is the implementation of the create configmap command.
|
// CreateConfigMap is the implementation of the create configmap command.
|
||||||
func CreateConfigMap(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateConfigMap(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -37,7 +37,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateDeployment is a macro command to create a new deployment
|
// NewCmdCreateDeployment is a macro command to create a new deployment
|
||||||
func NewCmdCreateDeployment(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateDeployment(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "deployment NAME --image=image [--dry-run]",
|
Use: "deployment NAME --image=image [--dry-run]",
|
||||||
Aliases: []string{"deploy"},
|
Aliases: []string{"deploy"},
|
||||||
@ -59,7 +59,7 @@ func NewCmdCreateDeployment(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateDeployment implements the behavior to run the create deployment command
|
// CreateDeployment implements the behavior to run the create deployment command
|
||||||
func CreateDeployment(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateDeployment(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -37,7 +37,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateNamespace is a macro command to create a new namespace
|
// NewCmdCreateNamespace is a macro command to create a new namespace
|
||||||
func NewCmdCreateNamespace(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateNamespace(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "namespace NAME [--dry-run]",
|
Use: "namespace NAME [--dry-run]",
|
||||||
Aliases: []string{"ns"},
|
Aliases: []string{"ns"},
|
||||||
@ -58,7 +58,7 @@ func NewCmdCreateNamespace(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateNamespace implements the behavior to run the create namespace command
|
// CreateNamespace implements the behavior to run the create namespace command
|
||||||
func CreateNamespace(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateNamespace(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -40,7 +40,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateQuota is a macro command to create a new quota
|
// NewCmdCreateQuota is a macro command to create a new quota
|
||||||
func NewCmdCreateQuota(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateQuota(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "quota NAME [--hard=key1=value1,key2=value2] [--scopes=Scope1,Scope2] [--dry-run=bool]",
|
Use: "quota NAME [--hard=key1=value1,key2=value2] [--scopes=Scope1,Scope2] [--dry-run=bool]",
|
||||||
Aliases: []string{"resourcequota"},
|
Aliases: []string{"resourcequota"},
|
||||||
@ -63,7 +63,7 @@ func NewCmdCreateQuota(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateQuota implements the behavior to run the create quota command
|
// CreateQuota implements the behavior to run the create quota command
|
||||||
func CreateQuota(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateQuota(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -28,7 +28,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateSecret groups subcommands to create various types of secrets
|
// NewCmdCreateSecret groups subcommands to create various types of secrets
|
||||||
func NewCmdCreateSecret(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateSecret(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "secret",
|
Use: "secret",
|
||||||
Short: "Create a secret using specified subcommand",
|
Short: "Create a secret using specified subcommand",
|
||||||
@ -70,7 +70,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateSecretGeneric is a command to create generic secrets from files, directories, or literal values
|
// NewCmdCreateSecretGeneric is a command to create generic secrets from files, directories, or literal values
|
||||||
func NewCmdCreateSecretGeneric(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateSecretGeneric(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]",
|
Use: "generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]",
|
||||||
Short: "Create a secret from a local file, directory or literal value",
|
Short: "Create a secret from a local file, directory or literal value",
|
||||||
@ -92,7 +92,7 @@ func NewCmdCreateSecretGeneric(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Comm
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateSecretGeneric is the implementation of the create secret generic command
|
// CreateSecretGeneric is the implementation of the create secret generic command
|
||||||
func CreateSecretGeneric(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateSecretGeneric(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -138,7 +138,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateSecretDockerRegistry is a macro command for creating secrets to work with Docker registries
|
// NewCmdCreateSecretDockerRegistry is a macro command for creating secrets to work with Docker registries
|
||||||
func NewCmdCreateSecretDockerRegistry(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateSecretDockerRegistry(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "docker-registry NAME --docker-username=user --docker-password=password --docker-email=email [--docker-server=string] [--from-literal=key1=value1] [--dry-run]",
|
Use: "docker-registry NAME --docker-username=user --docker-password=password --docker-email=email [--docker-server=string] [--from-literal=key1=value1] [--dry-run]",
|
||||||
Short: "Create a secret for use with a Docker registry",
|
Short: "Create a secret for use with a Docker registry",
|
||||||
@ -165,7 +165,7 @@ func NewCmdCreateSecretDockerRegistry(f *cmdutil.Factory, cmdOut io.Writer) *cob
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateSecretDockerRegistry is the implementation of the create secret docker-registry command
|
// CreateSecretDockerRegistry is the implementation of the create secret docker-registry command
|
||||||
func CreateSecretDockerRegistry(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateSecretDockerRegistry(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -209,7 +209,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateSecretTLS is a macro command for creating secrets to work with Docker registries
|
// NewCmdCreateSecretTLS is a macro command for creating secrets to work with Docker registries
|
||||||
func NewCmdCreateSecretTLS(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateSecretTLS(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "tls NAME --cert=path/to/cert/file --key=path/to/key/file [--dry-run]",
|
Use: "tls NAME --cert=path/to/cert/file --key=path/to/key/file [--dry-run]",
|
||||||
Short: "Create a TLS secret",
|
Short: "Create a TLS secret",
|
||||||
@ -230,7 +230,7 @@ func NewCmdCreateSecretTLS(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateSecretTLS is the implementation of the create secret tls command
|
// CreateSecretTLS is the implementation of the create secret tls command
|
||||||
func CreateSecretTLS(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateSecretTLS(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -29,7 +29,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateService is a macro command to create a new service
|
// NewCmdCreateService is a macro command to create a new service
|
||||||
func NewCmdCreateService(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateService(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "service",
|
Use: "service",
|
||||||
Aliases: []string{"svc"},
|
Aliases: []string{"svc"},
|
||||||
@ -63,7 +63,7 @@ func addPortFlags(cmd *cobra.Command) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewCmdCreateServiceClusterIP is a command to create a clusterIP service
|
// NewCmdCreateServiceClusterIP is a command to create a clusterIP service
|
||||||
func NewCmdCreateServiceClusterIP(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateServiceClusterIP(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "clusterip NAME [--tcp=<port>:<targetPort>] [--dry-run]",
|
Use: "clusterip NAME [--tcp=<port>:<targetPort>] [--dry-run]",
|
||||||
Short: "Create a clusterIP service.",
|
Short: "Create a clusterIP service.",
|
||||||
@ -84,7 +84,7 @@ func NewCmdCreateServiceClusterIP(f *cmdutil.Factory, cmdOut io.Writer) *cobra.C
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateServiceClusterIP implements the behavior to run the create service clusterIP command
|
// CreateServiceClusterIP implements the behavior to run the create service clusterIP command
|
||||||
func CreateServiceClusterIP(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateServiceClusterIP(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -119,7 +119,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateServiceNodePort is a macro command for creating a NodePort service
|
// NewCmdCreateServiceNodePort is a macro command for creating a NodePort service
|
||||||
func NewCmdCreateServiceNodePort(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateServiceNodePort(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "nodeport NAME [--tcp=port:targetPort] [--dry-run]",
|
Use: "nodeport NAME [--tcp=port:targetPort] [--dry-run]",
|
||||||
Short: "Create a NodePort service.",
|
Short: "Create a NodePort service.",
|
||||||
@ -140,7 +140,7 @@ func NewCmdCreateServiceNodePort(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Co
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateServiceNodePort is the implementation of the create service nodeport command
|
// CreateServiceNodePort is the implementation of the create service nodeport command
|
||||||
func CreateServiceNodePort(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateServiceNodePort(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -176,7 +176,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateServiceLoadBalancer is a macro command for creating a LoadBalancer service
|
// NewCmdCreateServiceLoadBalancer is a macro command for creating a LoadBalancer service
|
||||||
func NewCmdCreateServiceLoadBalancer(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateServiceLoadBalancer(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "loadbalancer NAME [--tcp=port:targetPort] [--dry-run]",
|
Use: "loadbalancer NAME [--tcp=port:targetPort] [--dry-run]",
|
||||||
Short: "Create a LoadBalancer service.",
|
Short: "Create a LoadBalancer service.",
|
||||||
@ -196,7 +196,7 @@ func NewCmdCreateServiceLoadBalancer(f *cmdutil.Factory, cmdOut io.Writer) *cobr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateServiceLoadBalancer is the implementation of the service loadbalancer command
|
// CreateServiceLoadBalancer is the implementation of the service loadbalancer command
|
||||||
func CreateServiceLoadBalancer(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateServiceLoadBalancer(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -37,7 +37,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCreateServiceAccount is a macro command to create a new service account
|
// NewCmdCreateServiceAccount is a macro command to create a new service account
|
||||||
func NewCmdCreateServiceAccount(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
func NewCmdCreateServiceAccount(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "serviceaccount NAME [--dry-run]",
|
Use: "serviceaccount NAME [--dry-run]",
|
||||||
Aliases: []string{"sa"},
|
Aliases: []string{"sa"},
|
||||||
@ -58,7 +58,7 @@ func NewCmdCreateServiceAccount(f *cmdutil.Factory, cmdOut io.Writer) *cobra.Com
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateServiceAccount implements the behavior to run the create service account command
|
// CreateServiceAccount implements the behavior to run the create service account command
|
||||||
func CreateServiceAccount(f *cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
func CreateServiceAccount(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
name, err := NameFromCommandArgs(cmd, args)
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -66,7 +66,7 @@ var (
|
|||||||
kubectl delete pods --all`)
|
kubectl delete pods --all`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdDelete(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdDelete(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
// retrieve a list of handled resources from printer as valid args
|
// retrieve a list of handled resources from printer as valid args
|
||||||
@ -108,7 +108,7 @@ func NewCmdDelete(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunDelete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
func RunDelete(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
||||||
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -158,7 +158,7 @@ func RunDelete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
|
|||||||
return DeleteResult(r, out, ignoreNotFound, shortOutput, mapper)
|
return DeleteResult(r, out, ignoreNotFound, shortOutput, mapper)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReapResult(r *resource.Result, f *cmdutil.Factory, out io.Writer, isDefaultDelete, ignoreNotFound bool, timeout time.Duration, gracePeriod int, shortOutput bool, mapper meta.RESTMapper, quiet bool) error {
|
func ReapResult(r *resource.Result, f cmdutil.Factory, out io.Writer, isDefaultDelete, ignoreNotFound bool, timeout time.Duration, gracePeriod int, shortOutput bool, mapper meta.RESTMapper, quiet bool) error {
|
||||||
found := 0
|
found := 0
|
||||||
if ignoreNotFound {
|
if ignoreNotFound {
|
||||||
r = r.IgnoreErrors(errors.IsNotFound)
|
r = r.IgnoreErrors(errors.IsNotFound)
|
||||||
|
@ -67,7 +67,7 @@ var (
|
|||||||
kubectl describe pods frontend`)
|
kubectl describe pods frontend`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdDescribe(f *cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command {
|
func NewCmdDescribe(f cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
describerSettings := &kubectl.DescriberSettings{}
|
describerSettings := &kubectl.DescriberSettings{}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ func NewCmdDescribe(f *cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunDescribe(f *cmdutil.Factory, out, cmdErr io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions, describerSettings *kubectl.DescriberSettings) error {
|
func RunDescribe(f cmdutil.Factory, out, cmdErr io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions, describerSettings *kubectl.DescriberSettings) error {
|
||||||
selector := cmdutil.GetFlagString(cmd, "selector")
|
selector := cmdutil.GetFlagString(cmd, "selector")
|
||||||
allNamespaces := cmdutil.GetFlagBool(cmd, "all-namespaces")
|
allNamespaces := cmdutil.GetFlagBool(cmd, "all-namespaces")
|
||||||
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
@ -157,7 +157,7 @@ func RunDescribe(f *cmdutil.Factory, out, cmdErr io.Writer, cmd *cobra.Command,
|
|||||||
return utilerrors.NewAggregate(allErrs)
|
return utilerrors.NewAggregate(allErrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func DescribeMatchingResources(mapper meta.RESTMapper, typer runtime.ObjectTyper, f *cmdutil.Factory, namespace, rsrc, prefix string, describerSettings *kubectl.DescriberSettings, out io.Writer, originalError error) error {
|
func DescribeMatchingResources(mapper meta.RESTMapper, typer runtime.ObjectTyper, f cmdutil.Factory, namespace, rsrc, prefix string, describerSettings *kubectl.DescriberSettings, out io.Writer, originalError error) error {
|
||||||
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true)).
|
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true)).
|
||||||
NamespaceParam(namespace).DefaultNamespace().
|
NamespaceParam(namespace).DefaultNamespace().
|
||||||
ResourceTypeOrNameArgs(true, rsrc).
|
ResourceTypeOrNameArgs(true, rsrc).
|
||||||
|
@ -40,7 +40,7 @@ import (
|
|||||||
type DrainOptions struct {
|
type DrainOptions struct {
|
||||||
client *internalclientset.Clientset
|
client *internalclientset.Clientset
|
||||||
restClient *restclient.RESTClient
|
restClient *restclient.RESTClient
|
||||||
factory *cmdutil.Factory
|
factory cmdutil.Factory
|
||||||
Force bool
|
Force bool
|
||||||
GracePeriodSeconds int
|
GracePeriodSeconds int
|
||||||
IgnoreDaemonsets bool
|
IgnoreDaemonsets bool
|
||||||
@ -80,7 +80,7 @@ var (
|
|||||||
`)
|
`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdCordon(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdCordon(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &DrainOptions{factory: f, out: out}
|
options := &DrainOptions{factory: f, out: out}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -106,7 +106,7 @@ var (
|
|||||||
`)
|
`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdUncordon(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdUncordon(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &DrainOptions{factory: f, out: out}
|
options := &DrainOptions{factory: f, out: out}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -151,7 +151,7 @@ var (
|
|||||||
`)
|
`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdDrain(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdDrain(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &DrainOptions{factory: f, out: out}
|
options := &DrainOptions{factory: f, out: out}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
|
@ -69,7 +69,7 @@ func TestCordon(t *testing.T) {
|
|||||||
description string
|
description string
|
||||||
node *api.Node
|
node *api.Node
|
||||||
expected *api.Node
|
expected *api.Node
|
||||||
cmd func(*cmdutil.Factory, io.Writer) *cobra.Command
|
cmd func(cmdutil.Factory, io.Writer) *cobra.Command
|
||||||
arg string
|
arg string
|
||||||
expectFatal bool
|
expectFatal bool
|
||||||
}{
|
}{
|
||||||
@ -177,7 +177,10 @@ func TestCordon(t *testing.T) {
|
|||||||
// Restore cmdutil behavior
|
// Restore cmdutil behavior
|
||||||
cmdutil.DefaultBehaviorOnFatal()
|
cmdutil.DefaultBehaviorOnFatal()
|
||||||
}()
|
}()
|
||||||
cmdutil.BehaviorOnFatal(func(e string, code int) { saw_fatal = true; panic(e) })
|
cmdutil.BehaviorOnFatal(func(e string, code int) {
|
||||||
|
saw_fatal = true
|
||||||
|
panic(e)
|
||||||
|
})
|
||||||
cmd.SetArgs([]string{test.arg})
|
cmd.SetArgs([]string{test.arg})
|
||||||
cmd.Execute()
|
cmd.Execute()
|
||||||
}()
|
}()
|
||||||
|
@ -80,7 +80,7 @@ var (
|
|||||||
|
|
||||||
var errExit = fmt.Errorf("exit directly")
|
var errExit = fmt.Errorf("exit directly")
|
||||||
|
|
||||||
func NewCmdEdit(f *cmdutil.Factory, out, errOut io.Writer) *cobra.Command {
|
func NewCmdEdit(f cmdutil.Factory, out, errOut io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
// retrieve a list of handled resources from printer as valid args
|
// retrieve a list of handled resources from printer as valid args
|
||||||
@ -121,7 +121,7 @@ func NewCmdEdit(f *cmdutil.Factory, out, errOut io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunEdit(f *cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
func RunEdit(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
||||||
o, err := getPrinter(cmd)
|
o, err := getPrinter(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -321,7 +321,7 @@ func getPrinter(cmd *cobra.Command) (*editPrinterOptions, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMapperAndResult(f *cmdutil.Factory, args []string, options *resource.FilenameOptions) (meta.RESTMapper, *resource.Mapper, *resource.Result, string, error) {
|
func getMapperAndResult(f cmdutil.Factory, args []string, options *resource.FilenameOptions) (meta.RESTMapper, *resource.Mapper, *resource.Result, string, error) {
|
||||||
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, "", err
|
return nil, nil, nil, "", err
|
||||||
@ -441,7 +441,7 @@ func visitToPatch(originalObj runtime.Object, updates *resource.Info, mapper met
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func visitAnnotation(cmd *cobra.Command, f *cmdutil.Factory, updates *resource.Info, resourceMapper *resource.Mapper, encoder runtime.Encoder) ([]runtime.Object, error) {
|
func visitAnnotation(cmd *cobra.Command, f cmdutil.Factory, updates *resource.Info, resourceMapper *resource.Mapper, encoder runtime.Encoder) ([]runtime.Object, error) {
|
||||||
mutatedObjects := []runtime.Object{}
|
mutatedObjects := []runtime.Object{}
|
||||||
annotationVisitor := resource.NewFlattenListVisitor(updates, resourceMapper)
|
annotationVisitor := resource.NewFlattenListVisitor(updates, resourceMapper)
|
||||||
// iterate through all items to apply annotations
|
// iterate through all items to apply annotations
|
||||||
|
@ -30,7 +30,6 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/client/restclient"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/remotecommand"
|
"k8s.io/kubernetes/pkg/client/unversioned/remotecommand"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
|
||||||
remotecommandserver "k8s.io/kubernetes/pkg/kubelet/server/remotecommand"
|
remotecommandserver "k8s.io/kubernetes/pkg/kubelet/server/remotecommand"
|
||||||
"k8s.io/kubernetes/pkg/util/interrupt"
|
"k8s.io/kubernetes/pkg/util/interrupt"
|
||||||
"k8s.io/kubernetes/pkg/util/term"
|
"k8s.io/kubernetes/pkg/util/term"
|
||||||
@ -53,7 +52,7 @@ const (
|
|||||||
execUsageStr = "expected 'exec POD_NAME COMMAND [ARG1] [ARG2] ... [ARGN]'.\nPOD_NAME and COMMAND are required arguments for the exec command"
|
execUsageStr = "expected 'exec POD_NAME COMMAND [ARG1] [ARG2] ... [ARGN]'.\nPOD_NAME and COMMAND are required arguments for the exec command"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdExec(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) *cobra.Command {
|
func NewCmdExec(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) *cobra.Command {
|
||||||
options := &ExecOptions{
|
options := &ExecOptions{
|
||||||
StreamOptions: StreamOptions{
|
StreamOptions: StreamOptions{
|
||||||
In: cmdIn,
|
In: cmdIn,
|
||||||
@ -140,7 +139,7 @@ type ExecOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete verifies command line arguments and loads data from the command environment
|
// Complete verifies command line arguments and loads data from the command environment
|
||||||
func (p *ExecOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, argsIn []string, argsLenAtDash int) error {
|
func (p *ExecOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, argsIn []string, argsLenAtDash int) error {
|
||||||
// Let kubectl exec follow rules for `--`, see #13004 issue
|
// Let kubectl exec follow rules for `--`, see #13004 issue
|
||||||
if len(p.PodName) == 0 && (len(argsIn) == 0 || argsLenAtDash == 0) {
|
if len(p.PodName) == 0 && (len(argsIn) == 0 || argsLenAtDash == 0) {
|
||||||
return cmdutil.UsageError(cmd, execUsageStr)
|
return cmdutil.UsageError(cmd, execUsageStr)
|
||||||
@ -158,29 +157,6 @@ func (p *ExecOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, argsIn []
|
|||||||
return cmdutil.UsageError(cmd, execUsageStr)
|
return cmdutil.UsageError(cmd, execUsageStr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace, _, err := f.DefaultNamespace()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
p.Namespace = namespace
|
|
||||||
|
|
||||||
clientMapper := resource.ClientMapperFunc(f.ClientForMapping)
|
|
||||||
mapper, typer := f.Object()
|
|
||||||
decoder := f.Decoder(true)
|
|
||||||
|
|
||||||
infos, err := resource.NewBuilder(mapper, typer, clientMapper, decoder).
|
|
||||||
NamespaceParam(p.Namespace).DefaultNamespace().
|
|
||||||
ResourceNames("pods", p.PodName).
|
|
||||||
SingleResourceType().
|
|
||||||
Do().Infos()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if len(infos) != 1 {
|
|
||||||
return cmdutil.UsageError(cmd, execUsageStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
p.PodName = infos[0].Name
|
|
||||||
|
|
||||||
cmdParent := cmd.Parent()
|
cmdParent := cmd.Parent()
|
||||||
if cmdParent != nil {
|
if cmdParent != nil {
|
||||||
@ -190,6 +166,12 @@ func (p *ExecOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, argsIn []
|
|||||||
p.SuggestedCmdUsage = fmt.Sprintf("Use '%s describe pod/%s' to see all of the containers in this pod.", p.FullCmdName, p.PodName)
|
p.SuggestedCmdUsage = fmt.Sprintf("Use '%s describe pod/%s' to see all of the containers in this pod.", p.FullCmdName, p.PodName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace, _, err := f.DefaultNamespace()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.Namespace = namespace
|
||||||
|
|
||||||
config, err := f.ClientConfig()
|
config, err := f.ClientConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -55,7 +55,7 @@ func TestPodAndContainer(t *testing.T) {
|
|||||||
p *ExecOptions
|
p *ExecOptions
|
||||||
name string
|
name string
|
||||||
expectError bool
|
expectError bool
|
||||||
expectedPod *api.Pod
|
expectedPod string
|
||||||
expectedContainer string
|
expectedContainer string
|
||||||
expectedArgs []string
|
expectedArgs []string
|
||||||
}{
|
}{
|
||||||
@ -81,18 +81,10 @@ func TestPodAndContainer(t *testing.T) {
|
|||||||
p: &ExecOptions{StreamOptions: StreamOptions{PodName: "foo"}},
|
p: &ExecOptions{StreamOptions: StreamOptions{PodName: "foo"}},
|
||||||
args: []string{"cmd"},
|
args: []string{"cmd"},
|
||||||
argsLenAtDash: -1,
|
argsLenAtDash: -1,
|
||||||
expectedPod: execPod(),
|
expectedPod: "foo",
|
||||||
expectedArgs: []string{"cmd"},
|
expectedArgs: []string{"cmd"},
|
||||||
name: "pod in flags",
|
name: "pod in flags",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
p: &ExecOptions{StreamOptions: StreamOptions{PodName: "pod/foo"}},
|
|
||||||
args: []string{"cmd"},
|
|
||||||
argsLenAtDash: -1,
|
|
||||||
expectedPod: execPod(),
|
|
||||||
expectedArgs: []string{"cmd"},
|
|
||||||
name: "pod with 'pod/' prefix in flags",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
p: &ExecOptions{},
|
p: &ExecOptions{},
|
||||||
args: []string{"foo", "cmd"},
|
args: []string{"foo", "cmd"},
|
||||||
@ -111,23 +103,15 @@ func TestPodAndContainer(t *testing.T) {
|
|||||||
p: &ExecOptions{},
|
p: &ExecOptions{},
|
||||||
args: []string{"foo", "cmd"},
|
args: []string{"foo", "cmd"},
|
||||||
argsLenAtDash: -1,
|
argsLenAtDash: -1,
|
||||||
expectedPod: execPod(),
|
expectedPod: "foo",
|
||||||
expectedArgs: []string{"cmd"},
|
expectedArgs: []string{"cmd"},
|
||||||
name: "cmd, w/o flags",
|
name: "cmd, w/o flags",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
p: &ExecOptions{},
|
|
||||||
args: []string{"pod/foo", "cmd"},
|
|
||||||
argsLenAtDash: -1,
|
|
||||||
expectedPod: execPod(),
|
|
||||||
expectedArgs: []string{"cmd"},
|
|
||||||
name: "pod with 'pod/' prefix, cmd, w/o flags",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
p: &ExecOptions{},
|
p: &ExecOptions{},
|
||||||
args: []string{"foo", "cmd"},
|
args: []string{"foo", "cmd"},
|
||||||
argsLenAtDash: 1,
|
argsLenAtDash: 1,
|
||||||
expectedPod: execPod(),
|
expectedPod: "foo",
|
||||||
expectedArgs: []string{"cmd"},
|
expectedArgs: []string{"cmd"},
|
||||||
name: "cmd, cmd is behind dash",
|
name: "cmd, cmd is behind dash",
|
||||||
},
|
},
|
||||||
@ -135,27 +119,17 @@ func TestPodAndContainer(t *testing.T) {
|
|||||||
p: &ExecOptions{StreamOptions: StreamOptions{ContainerName: "bar"}},
|
p: &ExecOptions{StreamOptions: StreamOptions{ContainerName: "bar"}},
|
||||||
args: []string{"foo", "cmd"},
|
args: []string{"foo", "cmd"},
|
||||||
argsLenAtDash: -1,
|
argsLenAtDash: -1,
|
||||||
expectedPod: execPod(),
|
expectedPod: "foo",
|
||||||
expectedContainer: "bar",
|
expectedContainer: "bar",
|
||||||
expectedArgs: []string{"cmd"},
|
expectedArgs: []string{"cmd"},
|
||||||
name: "cmd, container in flag",
|
name: "cmd, container in flag",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
f, tf, codec, ns := NewAPIFactory()
|
f, tf, _, ns := NewAPIFactory()
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
NegotiatedSerializer: ns,
|
NegotiatedSerializer: ns,
|
||||||
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
|
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return nil, nil }),
|
||||||
switch m := req.Method; {
|
|
||||||
case m == "GET":
|
|
||||||
body := objBody(codec, test.expectedPod)
|
|
||||||
return &http.Response{StatusCode: 200, Header: defaultHeader(), Body: body}, nil
|
|
||||||
default:
|
|
||||||
//Ensures no GET is performed when deleting by name
|
|
||||||
t.Errorf("%s: unexpected request: %s %#v\n%#v", test.name, req.Method, req.URL, req)
|
|
||||||
return nil, fmt.Errorf("unexpected request")
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
tf.Namespace = "test"
|
tf.Namespace = "test"
|
||||||
tf.ClientConfig = defaultClientConfig()
|
tf.ClientConfig = defaultClientConfig()
|
||||||
@ -172,8 +146,8 @@ func TestPodAndContainer(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if options.PodName != test.expectedPod.Name {
|
if options.PodName != test.expectedPod {
|
||||||
t.Errorf("expected: %s, got: %s (%s)", test.expectedPod.Name, options.PodName, test.name)
|
t.Errorf("expected: %s, got: %s (%s)", test.expectedPod, options.PodName, test.name)
|
||||||
}
|
}
|
||||||
if options.ContainerName != test.expectedContainer {
|
if options.ContainerName != test.expectedContainer {
|
||||||
t.Errorf("expected: %s, got: %s (%s)", test.expectedContainer, options.ContainerName, test.name)
|
t.Errorf("expected: %s, got: %s (%s)", test.expectedContainer, options.ContainerName, test.name)
|
||||||
@ -187,20 +161,18 @@ func TestPodAndContainer(t *testing.T) {
|
|||||||
func TestExec(t *testing.T) {
|
func TestExec(t *testing.T) {
|
||||||
version := registered.GroupOrDie(api.GroupName).GroupVersion.Version
|
version := registered.GroupOrDie(api.GroupName).GroupVersion.Version
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name, shortPodPath, podPath, execPath, container string
|
name, podPath, execPath, container string
|
||||||
pod *api.Pod
|
pod *api.Pod
|
||||||
execErr bool
|
execErr bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "pod exec",
|
name: "pod exec",
|
||||||
shortPodPath: "/namespaces/test/pods/foo",
|
|
||||||
podPath: "/api/" + version + "/namespaces/test/pods/foo",
|
podPath: "/api/" + version + "/namespaces/test/pods/foo",
|
||||||
execPath: "/api/" + version + "/namespaces/test/pods/foo/exec",
|
execPath: "/api/" + version + "/namespaces/test/pods/foo/exec",
|
||||||
pod: execPod(),
|
pod: execPod(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "pod exec error",
|
name: "pod exec error",
|
||||||
shortPodPath: "/namespaces/test/pods/foo",
|
|
||||||
podPath: "/api/" + version + "/namespaces/test/pods/foo",
|
podPath: "/api/" + version + "/namespaces/test/pods/foo",
|
||||||
execPath: "/api/" + version + "/namespaces/test/pods/foo/exec",
|
execPath: "/api/" + version + "/namespaces/test/pods/foo/exec",
|
||||||
pod: execPod(),
|
pod: execPod(),
|
||||||
@ -216,9 +188,6 @@ func TestExec(t *testing.T) {
|
|||||||
case p == test.podPath && m == "GET":
|
case p == test.podPath && m == "GET":
|
||||||
body := objBody(codec, test.pod)
|
body := objBody(codec, test.pod)
|
||||||
return &http.Response{StatusCode: 200, Header: defaultHeader(), Body: body}, nil
|
return &http.Response{StatusCode: 200, Header: defaultHeader(), Body: body}, nil
|
||||||
case p == test.shortPodPath && m == "GET":
|
|
||||||
body := objBody(codec, test.pod)
|
|
||||||
return &http.Response{StatusCode: 200, Header: defaultHeader(), Body: body}, nil
|
|
||||||
default:
|
default:
|
||||||
// Ensures no GET is performed when deleting by name
|
// Ensures no GET is performed when deleting by name
|
||||||
t.Errorf("%s: unexpected request: %s %#v\n%#v", test.name, req.Method, req.URL, req)
|
t.Errorf("%s: unexpected request: %s %#v\n%#v", test.name, req.Method, req.URL, req)
|
||||||
|
@ -44,7 +44,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdExplain returns a cobra command for swagger docs
|
// NewCmdExplain returns a cobra command for swagger docs
|
||||||
func NewCmdExplain(f *cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command {
|
func NewCmdExplain(f cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "explain RESOURCE",
|
Use: "explain RESOURCE",
|
||||||
Short: "Documentation of resources",
|
Short: "Documentation of resources",
|
||||||
@ -61,7 +61,7 @@ func NewCmdExplain(f *cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunExplain executes the appropriate steps to print a model's documentation
|
// RunExplain executes the appropriate steps to print a model's documentation
|
||||||
func RunExplain(f *cmdutil.Factory, out, cmdErr io.Writer, cmd *cobra.Command, args []string) error {
|
func RunExplain(f cmdutil.Factory, out, cmdErr io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
fmt.Fprint(cmdErr, "You must specify the type of resource to explain. ", valid_resources)
|
fmt.Fprint(cmdErr, "You must specify the type of resource to explain. ", valid_resources)
|
||||||
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
||||||
|
@ -73,7 +73,7 @@ var (
|
|||||||
kubectl expose deployment nginx --port=80 --target-port=8000`)
|
kubectl expose deployment nginx --port=80 --target-port=8000`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdExposeService(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdExposeService(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
validArgs, argAliases := []string{}, []string{}
|
validArgs, argAliases := []string{}, []string{}
|
||||||
@ -123,7 +123,7 @@ func NewCmdExposeService(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
func RunExpose(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
||||||
namespace, enforceNamespace, err := f.DefaultNamespace()
|
namespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -81,7 +81,7 @@ var (
|
|||||||
|
|
||||||
// NewCmdGet creates a command object for the generic "get" action, which
|
// NewCmdGet creates a command object for the generic "get" action, which
|
||||||
// retrieves one or more resources from a server.
|
// retrieves one or more resources from a server.
|
||||||
func NewCmdGet(f *cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command {
|
func NewCmdGet(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command {
|
||||||
options := &GetOptions{}
|
options := &GetOptions{}
|
||||||
|
|
||||||
// retrieve a list of handled resources from printer as valid args
|
// retrieve a list of handled resources from printer as valid args
|
||||||
@ -125,7 +125,7 @@ func NewCmdGet(f *cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Comma
|
|||||||
|
|
||||||
// RunGet implements the generic Get command
|
// RunGet implements the generic Get command
|
||||||
// TODO: convert all direct flag accessors to a struct and pass that instead of cmd
|
// TODO: convert all direct flag accessors to a struct and pass that instead of cmd
|
||||||
func RunGet(f *cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args []string, options *GetOptions) error {
|
func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args []string, options *GetOptions) error {
|
||||||
if len(options.Raw) > 0 {
|
if len(options.Raw) > 0 {
|
||||||
restClient, err := f.RESTClient()
|
restClient, err := f.RESTClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -28,7 +28,7 @@ import (
|
|||||||
const help_long = `Help provides help for any command in the application.
|
const help_long = `Help provides help for any command in the application.
|
||||||
Simply type kubectl help [path to command] for full details.`
|
Simply type kubectl help [path to command] for full details.`
|
||||||
|
|
||||||
func NewCmdHelp(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdHelp(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "help [command] | STRING_TO_SEARCH",
|
Use: "help [command] | STRING_TO_SEARCH",
|
||||||
Short: "Help about any command",
|
Short: "Help about any command",
|
||||||
|
@ -88,7 +88,7 @@ var (
|
|||||||
kubectl label pods foo bar-`)
|
kubectl label pods foo bar-`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdLabel(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdLabel(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &LabelOptions{}
|
options := &LabelOptions{}
|
||||||
|
|
||||||
// retrieve a list of handled resources from printer as valid args
|
// retrieve a list of handled resources from printer as valid args
|
||||||
@ -135,7 +135,7 @@ func NewCmdLabel(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete adapts from the command line args and factory to the data required.
|
// Complete adapts from the command line args and factory to the data required.
|
||||||
func (o *LabelOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
func (o *LabelOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
||||||
o.out = out
|
o.out = out
|
||||||
o.local = cmdutil.GetFlagBool(cmd, "local")
|
o.local = cmdutil.GetFlagBool(cmd, "local")
|
||||||
o.overwrite = cmdutil.GetFlagBool(cmd, "overwrite")
|
o.overwrite = cmdutil.GetFlagBool(cmd, "overwrite")
|
||||||
@ -166,7 +166,7 @@ func (o *LabelOptions) Validate() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunLabel does the work
|
// RunLabel does the work
|
||||||
func (o *LabelOptions) RunLabel(f *cmdutil.Factory, cmd *cobra.Command) error {
|
func (o *LabelOptions) RunLabel(f cmdutil.Factory, cmd *cobra.Command) error {
|
||||||
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -74,7 +74,7 @@ type LogsOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewCmdLog creates a new pod logs command
|
// NewCmdLog creates a new pod logs command
|
||||||
func NewCmdLogs(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdLogs(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
o := &LogsOptions{}
|
o := &LogsOptions{}
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "logs [-f] [-p] POD [-c CONTAINER]",
|
Use: "logs [-f] [-p] POD [-c CONTAINER]",
|
||||||
@ -111,7 +111,7 @@ func NewCmdLogs(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *LogsOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) error {
|
func (o *LogsOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
containerName := cmdutil.GetFlagString(cmd, "container")
|
containerName := cmdutil.GetFlagString(cmd, "container")
|
||||||
switch len(args) {
|
switch len(args) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -69,7 +69,7 @@ var (
|
|||||||
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'`)
|
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdPatch(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdPatch(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &PatchOptions{}
|
options := &PatchOptions{}
|
||||||
|
|
||||||
// retrieve a list of handled resources from printer as valid args
|
// retrieve a list of handled resources from printer as valid args
|
||||||
@ -111,7 +111,7 @@ func NewCmdPatch(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunPatch(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *PatchOptions) error {
|
func RunPatch(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *PatchOptions) error {
|
||||||
switch {
|
switch {
|
||||||
case options.Local && len(args) != 0:
|
case options.Local && len(args) != 0:
|
||||||
return fmt.Errorf("cannot specify --local and server resources")
|
return fmt.Errorf("cannot specify --local and server resources")
|
||||||
|
@ -62,7 +62,7 @@ var (
|
|||||||
kubectl port-forward mypod 0:5000`)
|
kubectl port-forward mypod 0:5000`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdPortForward(f *cmdutil.Factory, cmdOut, cmdErr io.Writer) *cobra.Command {
|
func NewCmdPortForward(f cmdutil.Factory, cmdOut, cmdErr io.Writer) *cobra.Command {
|
||||||
opts := &PortForwardOptions{
|
opts := &PortForwardOptions{
|
||||||
PortForwarder: &defaultPortForwarder{
|
PortForwarder: &defaultPortForwarder{
|
||||||
cmdOut: cmdOut,
|
cmdOut: cmdOut,
|
||||||
@ -112,7 +112,7 @@ func (f *defaultPortForwarder) ForwardPorts(method string, url *url.URL, opts Po
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete completes all the required options for port-forward cmd.
|
// Complete completes all the required options for port-forward cmd.
|
||||||
func (o *PortForwardOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, args []string, cmdOut io.Writer, cmdErr io.Writer) error {
|
func (o *PortForwardOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string, cmdOut io.Writer, cmdErr io.Writer) error {
|
||||||
var err error
|
var err error
|
||||||
o.PodName = cmdutil.GetFlagString(cmd, "pod")
|
o.PodName = cmdutil.GetFlagString(cmd, "pod")
|
||||||
if len(o.PodName) == 0 && len(args) == 0 {
|
if len(o.PodName) == 0 && len(args) == 0 {
|
||||||
|
@ -45,7 +45,7 @@ var (
|
|||||||
kubectl proxy --api-prefix=/k8s-api`)
|
kubectl proxy --api-prefix=/k8s-api`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdProxy(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdProxy(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix]",
|
Use: "proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix]",
|
||||||
Short: "Run a proxy to the Kubernetes API server",
|
Short: "Run a proxy to the Kubernetes API server",
|
||||||
@ -86,7 +86,7 @@ func NewCmdProxy(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunProxy(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command) error {
|
func RunProxy(f cmdutil.Factory, out io.Writer, cmd *cobra.Command) error {
|
||||||
path := cmdutil.GetFlagString(cmd, "unix-socket")
|
path := cmdutil.GetFlagString(cmd, "unix-socket")
|
||||||
port := cmdutil.GetFlagInt(cmd, "port")
|
port := cmdutil.GetFlagInt(cmd, "port")
|
||||||
address := cmdutil.GetFlagString(cmd, "address")
|
address := cmdutil.GetFlagString(cmd, "address")
|
||||||
|
@ -58,7 +58,7 @@ var (
|
|||||||
kubectl replace --force -f ./pod.json`)
|
kubectl replace --force -f ./pod.json`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdReplace(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdReplace(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -90,7 +90,7 @@ func NewCmdReplace(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunReplace(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
func RunReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
||||||
if len(os.Args) > 1 && os.Args[1] == "update" {
|
if len(os.Args) > 1 && os.Args[1] == "update" {
|
||||||
printDeprecationWarning("replace", "update")
|
printDeprecationWarning("replace", "update")
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ func RunReplace(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []st
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func forceReplace(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, shortOutput bool, options *resource.FilenameOptions) error {
|
func forceReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, shortOutput bool, options *resource.FilenameOptions) error {
|
||||||
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -74,7 +74,7 @@ var (
|
|||||||
pollInterval, _ = time.ParseDuration("3s")
|
pollInterval, _ = time.ParseDuration("3s")
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRollingUpdate(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdRollingUpdate(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -141,7 +141,7 @@ func validateArguments(cmd *cobra.Command, filenames, args []string) error {
|
|||||||
return utilerrors.NewAggregate(errors)
|
return utilerrors.NewAggregate(errors)
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunRollingUpdate(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
func RunRollingUpdate(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error {
|
||||||
if len(os.Args) > 1 && os.Args[1] == "rollingupdate" {
|
if len(os.Args) > 1 && os.Args[1] == "rollingupdate" {
|
||||||
printDeprecationWarning("rolling-update", "rollingupdate")
|
printDeprecationWarning("rolling-update", "rollingupdate")
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ var (
|
|||||||
`)
|
`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRollout(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdRollout(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "rollout SUBCOMMAND",
|
Use: "rollout SUBCOMMAND",
|
||||||
|
@ -39,7 +39,7 @@ var (
|
|||||||
kubectl rollout history deployment/abc --revision=3`)
|
kubectl rollout history deployment/abc --revision=3`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRolloutHistory(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdRolloutHistory(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
validArgs := []string{"deployment"}
|
validArgs := []string{"deployment"}
|
||||||
@ -63,7 +63,7 @@ func NewCmdRolloutHistory(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunHistory(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string, options *resource.FilenameOptions) error {
|
func RunHistory(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string, options *resource.FilenameOptions) error {
|
||||||
if len(args) == 0 && cmdutil.IsFilenameEmpty(options.Filenames) {
|
if len(args) == 0 && cmdutil.IsFilenameEmpty(options.Filenames) {
|
||||||
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ var (
|
|||||||
kubectl rollout pause deployment/nginx`)
|
kubectl rollout pause deployment/nginx`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRolloutPause(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdRolloutPause(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &PauseConfig{}
|
options := &PauseConfig{}
|
||||||
|
|
||||||
validArgs := []string{"deployment"}
|
validArgs := []string{"deployment"}
|
||||||
@ -90,7 +90,7 @@ func NewCmdRolloutPause(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *PauseConfig) CompletePause(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string) error {
|
func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string) error {
|
||||||
if len(args) == 0 && cmdutil.IsFilenameEmpty(o.Filenames) {
|
if len(args) == 0 && cmdutil.IsFilenameEmpty(o.Filenames) {
|
||||||
return cmdutil.UsageError(cmd, cmd.Use)
|
return cmdutil.UsageError(cmd, cmd.Use)
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ var (
|
|||||||
kubectl rollout resume deployment/nginx`)
|
kubectl rollout resume deployment/nginx`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRolloutResume(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdRolloutResume(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &ResumeConfig{}
|
options := &ResumeConfig{}
|
||||||
|
|
||||||
validArgs := []string{"deployment"}
|
validArgs := []string{"deployment"}
|
||||||
@ -88,7 +88,7 @@ func NewCmdRolloutResume(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *ResumeConfig) CompleteResume(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string) error {
|
func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string) error {
|
||||||
if len(args) == 0 && cmdutil.IsFilenameEmpty(o.Filenames) {
|
if len(args) == 0 && cmdutil.IsFilenameEmpty(o.Filenames) {
|
||||||
return cmdutil.UsageError(cmd, cmd.Use)
|
return cmdutil.UsageError(cmd, cmd.Use)
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ var (
|
|||||||
kubectl rollout status deployment/nginx`)
|
kubectl rollout status deployment/nginx`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRolloutStatus(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdRolloutStatus(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
validArgs := []string{"deployment"}
|
validArgs := []string{"deployment"}
|
||||||
@ -70,7 +70,7 @@ func NewCmdRolloutStatus(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunStatus(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string, options *resource.FilenameOptions) error {
|
func RunStatus(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string, options *resource.FilenameOptions) error {
|
||||||
if len(args) == 0 && cmdutil.IsFilenameEmpty(options.Filenames) {
|
if len(args) == 0 && cmdutil.IsFilenameEmpty(options.Filenames) {
|
||||||
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ var (
|
|||||||
kubectl rollout undo --dry-run=true deployment/abc`)
|
kubectl rollout undo --dry-run=true deployment/abc`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRolloutUndo(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdRolloutUndo(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &UndoOptions{}
|
options := &UndoOptions{}
|
||||||
|
|
||||||
validArgs := []string{"deployment"}
|
validArgs := []string{"deployment"}
|
||||||
@ -93,7 +93,7 @@ func NewCmdRolloutUndo(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *UndoOptions) CompleteUndo(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string) error {
|
func (o *UndoOptions) CompleteUndo(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []string) error {
|
||||||
if len(args) == 0 && cmdutil.IsFilenameEmpty(o.Filenames) {
|
if len(args) == 0 && cmdutil.IsFilenameEmpty(o.Filenames) {
|
||||||
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
return cmdutil.UsageError(cmd, "Required resource not specified.")
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,7 @@ var (
|
|||||||
kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'`)
|
kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdRun(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) *cobra.Command {
|
func NewCmdRun(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "run NAME --image=image [--env=\"key=value\"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]",
|
Use: "run NAME --image=image [--env=\"key=value\"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]",
|
||||||
// run-container is deprecated
|
// run-container is deprecated
|
||||||
@ -133,7 +133,7 @@ func addRunFlags(cmd *cobra.Command) {
|
|||||||
cmd.Flags().String("schedule", "", "A schedule in the Cron format the job should be run with.")
|
cmd.Flags().String("schedule", "", "A schedule in the Cron format the job should be run with.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func Run(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cobra.Command, args []string, argsLenAtDash int) error {
|
func Run(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cobra.Command, args []string, argsLenAtDash int) error {
|
||||||
if len(os.Args) > 1 && os.Args[1] == "run-container" {
|
if len(os.Args) > 1 && os.Args[1] == "run-container" {
|
||||||
printDeprecationWarning("run", "run-container")
|
printDeprecationWarning("run", "run-container")
|
||||||
}
|
}
|
||||||
@ -456,7 +456,7 @@ func waitForPodTerminated(podClient coreclient.PodsGetter, ns, name string, out
|
|||||||
return pod, err
|
return pod, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleAttachPod(f *cmdutil.Factory, podClient coreclient.PodsGetter, ns, name string, opts *AttachOptions, quiet bool) error {
|
func handleAttachPod(f cmdutil.Factory, podClient coreclient.PodsGetter, ns, name string, opts *AttachOptions, quiet bool) error {
|
||||||
pod, err := waitForPodRunning(podClient, ns, name, opts.Out, quiet)
|
pod, err := waitForPodRunning(podClient, ns, name, opts.Out, quiet)
|
||||||
if err != nil && err != conditions.ErrPodCompleted {
|
if err != nil && err != conditions.ErrPodCompleted {
|
||||||
return err
|
return err
|
||||||
@ -535,7 +535,7 @@ func verifyImagePullPolicy(cmd *cobra.Command) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateService(f *cmdutil.Factory, cmd *cobra.Command, args []string, serviceGenerator string, paramsIn map[string]interface{}, namespace string, out io.Writer) error {
|
func generateService(f cmdutil.Factory, cmd *cobra.Command, args []string, serviceGenerator string, paramsIn map[string]interface{}, namespace string, out io.Writer) error {
|
||||||
generators := f.Generators("expose")
|
generators := f.Generators("expose")
|
||||||
generator, found := generators[serviceGenerator]
|
generator, found := generators[serviceGenerator]
|
||||||
if !found {
|
if !found {
|
||||||
@ -583,7 +583,7 @@ func generateService(f *cmdutil.Factory, cmd *cobra.Command, args []string, serv
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createGeneratedObject(f *cmdutil.Factory, cmd *cobra.Command, generator kubectl.Generator, names []kubectl.GeneratorParam, params map[string]interface{}, overrides, namespace string) (runtime.Object, string, meta.RESTMapper, *meta.RESTMapping, error) {
|
func createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command, generator kubectl.Generator, names []kubectl.GeneratorParam, params map[string]interface{}, overrides, namespace string) (runtime.Object, string, meta.RESTMapper, *meta.RESTMapping, error) {
|
||||||
err := kubectl.ValidateParams(names, params)
|
err := kubectl.ValidateParams(names, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", nil, nil, err
|
return nil, "", nil, nil, err
|
||||||
|
@ -56,7 +56,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdScale returns a cobra command with the appropriate configuration and flags to run scale
|
// NewCmdScale returns a cobra command with the appropriate configuration and flags to run scale
|
||||||
func NewCmdScale(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdScale(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
validArgs := []string{"deployment", "replicaset", "replicationcontroller", "job"}
|
validArgs := []string{"deployment", "replicaset", "replicationcontroller", "job"}
|
||||||
@ -93,7 +93,7 @@ func NewCmdScale(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunScale executes the scaling
|
// RunScale executes the scaling
|
||||||
func RunScale(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, shortOutput bool, options *resource.FilenameOptions) error {
|
func RunScale(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, shortOutput bool, options *resource.FilenameOptions) error {
|
||||||
if len(os.Args) > 1 && os.Args[1] == "resize" {
|
if len(os.Args) > 1 && os.Args[1] == "resize" {
|
||||||
printDeprecationWarning("scale", "resize")
|
printDeprecationWarning("scale", "resize")
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ var (
|
|||||||
set_example = dedent.Dedent(``)
|
set_example = dedent.Dedent(``)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdSet(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdSet(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "set SUBCOMMAND",
|
Use: "set SUBCOMMAND",
|
||||||
|
@ -78,7 +78,7 @@ var (
|
|||||||
kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml`)
|
kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdImage(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdImage(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &ImageOptions{
|
options := &ImageOptions{
|
||||||
Out: out,
|
Out: out,
|
||||||
}
|
}
|
||||||
@ -105,7 +105,7 @@ func NewCmdImage(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *ImageOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, args []string) error {
|
func (o *ImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error {
|
||||||
o.Mapper, o.Typer = f.Object()
|
o.Mapper, o.Typer = f.Object()
|
||||||
o.UpdatePodSpecForObject = f.UpdatePodSpecForObject
|
o.UpdatePodSpecForObject = f.UpdatePodSpecForObject
|
||||||
o.Encoder = f.JSONEncoder()
|
o.Encoder = f.JSONEncoder()
|
||||||
|
@ -49,7 +49,7 @@ var (
|
|||||||
kubectl stop -f path/to/resources`)
|
kubectl stop -f path/to/resources`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdStop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdStop(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &resource.FilenameOptions{}
|
options := &resource.FilenameOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -75,7 +75,7 @@ func NewCmdStop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunStop(f *cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer, options *resource.FilenameOptions) error {
|
func RunStop(f cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer, options *resource.FilenameOptions) error {
|
||||||
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -47,7 +47,7 @@ type TaintOptions struct {
|
|||||||
selector string
|
selector string
|
||||||
overwrite bool
|
overwrite bool
|
||||||
all bool
|
all bool
|
||||||
f *cmdutil.Factory
|
f cmdutil.Factory
|
||||||
out io.Writer
|
out io.Writer
|
||||||
cmd *cobra.Command
|
cmd *cobra.Command
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ var (
|
|||||||
kubectl taint nodes foo dedicated-`)
|
kubectl taint nodes foo dedicated-`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdTaint(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdTaint(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &TaintOptions{}
|
options := &TaintOptions{}
|
||||||
|
|
||||||
validArgs := []string{"node"}
|
validArgs := []string{"node"}
|
||||||
@ -220,7 +220,7 @@ func parseTaints(spec []string) ([]api.Taint, []api.Taint, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete adapts from the command line args and factory to the data required.
|
// Complete adapts from the command line args and factory to the data required.
|
||||||
func (o *TaintOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
func (o *TaintOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
|
||||||
namespace, _, err := f.DefaultNamespace()
|
namespace, _, err := f.DefaultNamespace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -35,7 +35,7 @@ var (
|
|||||||
The top command allows you to see the resource consumption for nodes or pods.`)
|
The top command allows you to see the resource consumption for nodes or pods.`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdTop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdTop(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &TopOptions{}
|
options := &TopOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -55,6 +55,6 @@ func NewCmdTop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o TopOptions) RunTop(f *cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
func (o TopOptions) RunTop(f cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
||||||
return cmd.Help()
|
return cmd.Help()
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ var (
|
|||||||
kubectl top node NODE_NAME`)
|
kubectl top node NODE_NAME`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdTopNode(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdTopNode(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &TopNodeOptions{}
|
options := &TopNodeOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -78,7 +78,7 @@ func NewCmdTopNode(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *TopNodeOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
func (o *TopNodeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
||||||
var err error
|
var err error
|
||||||
if len(args) == 1 {
|
if len(args) == 1 {
|
||||||
o.ResourceName = args[0]
|
o.ResourceName = args[0]
|
||||||
|
@ -69,7 +69,7 @@ var (
|
|||||||
kubectl top pod -l name=myLabel`)
|
kubectl top pod -l name=myLabel`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdTopPod(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdTopPod(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
options := &TopPodOptions{}
|
options := &TopPodOptions{}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -96,7 +96,7 @@ func NewCmdTopPod(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *TopPodOptions) Complete(f *cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
func (o *TopPodOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer) error {
|
||||||
var err error
|
var err error
|
||||||
if len(args) == 1 {
|
if len(args) == 1 {
|
||||||
o.ResourceName = args[0]
|
o.ResourceName = args[0]
|
||||||
|
@ -77,87 +77,107 @@ const (
|
|||||||
// TODO: make the functions interfaces
|
// TODO: make the functions interfaces
|
||||||
// TODO: pass the various interfaces on the factory directly into the command constructors (so the
|
// TODO: pass the various interfaces on the factory directly into the command constructors (so the
|
||||||
// commands are decoupled from the factory).
|
// commands are decoupled from the factory).
|
||||||
type Factory struct {
|
type Factory interface {
|
||||||
clients *ClientCache
|
// Returns internal flagset
|
||||||
flags *pflag.FlagSet
|
FlagSet() *pflag.FlagSet
|
||||||
|
|
||||||
// Returns interfaces for dealing with arbitrary runtime.Objects.
|
// Returns interfaces for dealing with arbitrary runtime.Objects.
|
||||||
Object func() (meta.RESTMapper, runtime.ObjectTyper)
|
Object() (meta.RESTMapper, runtime.ObjectTyper)
|
||||||
// Returns interfaces for dealing with arbitrary
|
// Returns interfaces for dealing with arbitrary
|
||||||
// runtime.Unstructured. This performs API calls to discover types.
|
// runtime.Unstructured. This performs API calls to discover types.
|
||||||
UnstructuredObject func() (meta.RESTMapper, runtime.ObjectTyper, error)
|
UnstructuredObject() (meta.RESTMapper, runtime.ObjectTyper, error)
|
||||||
// Returns interfaces for decoding objects - if toInternal is set, decoded objects will be converted
|
// Returns interfaces for decoding objects - if toInternal is set, decoded objects will be converted
|
||||||
// into their internal form (if possible). Eventually the internal form will be removed as an option,
|
// into their internal form (if possible). Eventually the internal form will be removed as an option,
|
||||||
// and only versioned objects will be returned.
|
// and only versioned objects will be returned.
|
||||||
Decoder func(toInternal bool) runtime.Decoder
|
Decoder(toInternal bool) runtime.Decoder
|
||||||
// Returns an encoder capable of encoding a provided object into JSON in the default desired version.
|
// Returns an encoder capable of encoding a provided object into JSON in the default desired version.
|
||||||
JSONEncoder func() runtime.Encoder
|
JSONEncoder() runtime.Encoder
|
||||||
// ClientSet gives you back an internal, generated clientset
|
// ClientSet gives you back an internal, generated clientset
|
||||||
ClientSet func() (*internalclientset.Clientset, error)
|
ClientSet() (*internalclientset.Clientset, error)
|
||||||
// Returns a RESTClient for accessing Kubernetes resources or an error.
|
// Returns a RESTClient for accessing Kubernetes resources or an error.
|
||||||
RESTClient func() (*restclient.RESTClient, error)
|
RESTClient() (*restclient.RESTClient, error)
|
||||||
// Returns a client.Config for accessing the Kubernetes server.
|
// Returns a client.Config for accessing the Kubernetes server.
|
||||||
ClientConfig func() (*restclient.Config, error)
|
ClientConfig() (*restclient.Config, error)
|
||||||
// Returns a RESTClient for working with the specified RESTMapping or an error. This is intended
|
// Returns a RESTClient for working with the specified RESTMapping or an error. This is intended
|
||||||
// for working with arbitrary resources and is not guaranteed to point to a Kubernetes APIServer.
|
// for working with arbitrary resources and is not guaranteed to point to a Kubernetes APIServer.
|
||||||
ClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error)
|
ClientForMapping(mapping *meta.RESTMapping) (resource.RESTClient, error)
|
||||||
// Returns a RESTClient for working with Unstructured objects.
|
// Returns a RESTClient for working with Unstructured objects.
|
||||||
UnstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error)
|
UnstructuredClientForMapping(mapping *meta.RESTMapping) (resource.RESTClient, error)
|
||||||
// Returns a Describer for displaying the specified RESTMapping type or an error.
|
// Returns a Describer for displaying the specified RESTMapping type or an error.
|
||||||
Describer func(mapping *meta.RESTMapping) (kubectl.Describer, error)
|
Describer(mapping *meta.RESTMapping) (kubectl.Describer, error)
|
||||||
// Returns a Printer for formatting objects of the given type or an error.
|
// Returns a Printer for formatting objects of the given type or an error.
|
||||||
Printer func(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error)
|
Printer(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error)
|
||||||
// Returns a Scaler for changing the size of the specified RESTMapping type or an error
|
// Returns a Scaler for changing the size of the specified RESTMapping type or an error
|
||||||
Scaler func(mapping *meta.RESTMapping) (kubectl.Scaler, error)
|
Scaler(mapping *meta.RESTMapping) (kubectl.Scaler, error)
|
||||||
// Returns a Reaper for gracefully shutting down resources.
|
// Returns a Reaper for gracefully shutting down resources.
|
||||||
Reaper func(mapping *meta.RESTMapping) (kubectl.Reaper, error)
|
Reaper(mapping *meta.RESTMapping) (kubectl.Reaper, error)
|
||||||
// Returns a HistoryViewer for viewing change history
|
// Returns a HistoryViewer for viewing change history
|
||||||
HistoryViewer func(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error)
|
HistoryViewer(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error)
|
||||||
// Returns a Rollbacker for changing the rollback version of the specified RESTMapping type or an error
|
// Returns a Rollbacker for changing the rollback version of the specified RESTMapping type or an error
|
||||||
Rollbacker func(mapping *meta.RESTMapping) (kubectl.Rollbacker, error)
|
Rollbacker(mapping *meta.RESTMapping) (kubectl.Rollbacker, error)
|
||||||
// Returns a StatusViewer for printing rollout status.
|
// Returns a StatusViewer for printing rollout status.
|
||||||
StatusViewer func(mapping *meta.RESTMapping) (kubectl.StatusViewer, error)
|
StatusViewer(mapping *meta.RESTMapping) (kubectl.StatusViewer, error)
|
||||||
// MapBasedSelectorForObject returns the map-based selector associated with the provided object. If a
|
// MapBasedSelectorForObject returns the map-based selector associated with the provided object. If a
|
||||||
// new set-based selector is provided, an error is returned if the selector cannot be converted to a
|
// new set-based selector is provided, an error is returned if the selector cannot be converted to a
|
||||||
// map-based selector
|
// map-based selector
|
||||||
MapBasedSelectorForObject func(object runtime.Object) (string, error)
|
MapBasedSelectorForObject(object runtime.Object) (string, error)
|
||||||
// PortsForObject returns the ports associated with the provided object
|
// PortsForObject returns the ports associated with the provided object
|
||||||
PortsForObject func(object runtime.Object) ([]string, error)
|
PortsForObject(object runtime.Object) ([]string, error)
|
||||||
// ProtocolsForObject returns the <port, protocol> mapping associated with the provided object
|
// ProtocolsForObject returns the <port, protocol> mapping associated with the provided object
|
||||||
ProtocolsForObject func(object runtime.Object) (map[string]string, error)
|
ProtocolsForObject(object runtime.Object) (map[string]string, error)
|
||||||
// LabelsForObject returns the labels associated with the provided object
|
// LabelsForObject returns the labels associated with the provided object
|
||||||
LabelsForObject func(object runtime.Object) (map[string]string, error)
|
LabelsForObject(object runtime.Object) (map[string]string, error)
|
||||||
// LogsForObject returns a request for the logs associated with the provided object
|
// LogsForObject returns a request for the logs associated with the provided object
|
||||||
LogsForObject func(object, options runtime.Object) (*restclient.Request, error)
|
LogsForObject(object, options runtime.Object) (*restclient.Request, error)
|
||||||
// PauseObject marks the provided object as paused ie. it will not be reconciled by its controller.
|
// PauseObject marks the provided object as paused ie. it will not be reconciled by its controller.
|
||||||
PauseObject func(object runtime.Object) (bool, error)
|
PauseObject(object runtime.Object) (bool, error)
|
||||||
// ResumeObject resumes a paused object ie. it will be reconciled by its controller.
|
// ResumeObject resumes a paused object ie. it will be reconciled by its controller.
|
||||||
ResumeObject func(object runtime.Object) (bool, error)
|
ResumeObject(object runtime.Object) (bool, error)
|
||||||
// Returns a schema that can validate objects stored on disk.
|
// Returns a schema that can validate objects stored on disk.
|
||||||
Validator func(validate bool, cacheDir string) (validation.Schema, error)
|
Validator(validate bool, cacheDir string) (validation.Schema, error)
|
||||||
// SwaggerSchema returns the schema declaration for the provided group version kind.
|
// SwaggerSchema returns the schema declaration for the provided group version kind.
|
||||||
SwaggerSchema func(unversioned.GroupVersionKind) (*swagger.ApiDeclaration, error)
|
SwaggerSchema(unversioned.GroupVersionKind) (*swagger.ApiDeclaration, error)
|
||||||
// Returns the default namespace to use in cases where no
|
// Returns the default namespace to use in cases where no
|
||||||
// other namespace is specified and whether the namespace was
|
// other namespace is specified and whether the namespace was
|
||||||
// overridden.
|
// overridden.
|
||||||
DefaultNamespace func() (string, bool, error)
|
DefaultNamespace() (string, bool, error)
|
||||||
// Generators returns the generators for the provided command
|
// Generators returns the generators for the provided command
|
||||||
Generators func(cmdName string) map[string]kubectl.Generator
|
Generators(cmdName string) map[string]kubectl.Generator
|
||||||
// Check whether the kind of resources could be exposed
|
// Check whether the kind of resources could be exposed
|
||||||
CanBeExposed func(kind unversioned.GroupKind) error
|
CanBeExposed(kind unversioned.GroupKind) error
|
||||||
// Check whether the kind of resources could be autoscaled
|
// Check whether the kind of resources could be autoscaled
|
||||||
CanBeAutoscaled func(kind unversioned.GroupKind) error
|
CanBeAutoscaled(kind unversioned.GroupKind) error
|
||||||
// AttachablePodForObject returns the pod to which to attach given an object.
|
// AttachablePodForObject returns the pod to which to attach given an object.
|
||||||
AttachablePodForObject func(object runtime.Object) (*api.Pod, error)
|
AttachablePodForObject(object runtime.Object) (*api.Pod, error)
|
||||||
// UpdatePodSpecForObject will call the provided function on the pod spec this object supports,
|
// UpdatePodSpecForObject will call the provided function on the pod spec this object supports,
|
||||||
// return false if no pod spec is supported, or return an error.
|
// return false if no pod spec is supported, or return an error.
|
||||||
UpdatePodSpecForObject func(obj runtime.Object, fn func(*api.PodSpec) error) (bool, error)
|
UpdatePodSpecForObject(obj runtime.Object, fn func(*api.PodSpec) error) (bool, error)
|
||||||
// EditorEnvs returns a group of environment variables that the edit command
|
// EditorEnvs returns a group of environment variables that the edit command
|
||||||
// can range over in order to determine if the user has specified an editor
|
// can range over in order to determine if the user has specified an editor
|
||||||
// of their choice.
|
// of their choice.
|
||||||
EditorEnvs func() []string
|
EditorEnvs() []string
|
||||||
// PrintObjectSpecificMessage prints object-specific messages on the provided writer
|
// PrintObjectSpecificMessage prints object-specific messages on the provided writer
|
||||||
PrintObjectSpecificMessage func(obj runtime.Object, out io.Writer)
|
PrintObjectSpecificMessage(obj runtime.Object, out io.Writer)
|
||||||
|
|
||||||
|
// Command will stringify and return all environment arguments ie. a command run by a client
|
||||||
|
// using the factory.
|
||||||
|
Command() string
|
||||||
|
// BindFlags adds any flags that are common to all kubectl sub commands.
|
||||||
|
BindFlags(flags *pflag.FlagSet)
|
||||||
|
// BindExternalFlags adds any flags defined by external projects (not part of pflags)
|
||||||
|
BindExternalFlags(flags *pflag.FlagSet)
|
||||||
|
|
||||||
|
DefaultResourceFilterOptions(cmd *cobra.Command, withNamespace bool) *kubectl.PrintOptions
|
||||||
|
// DefaultResourceFilterFunc returns a collection of FilterFuncs suitable for filtering specific resource types.
|
||||||
|
DefaultResourceFilterFunc() kubectl.Filters
|
||||||
|
|
||||||
|
// PrintObject prints an api object given command line flags to modify the output format
|
||||||
|
PrintObject(cmd *cobra.Command, mapper meta.RESTMapper, obj runtime.Object, out io.Writer) error
|
||||||
|
// PrinterForMapping returns a printer suitable for displaying the provided resource type.
|
||||||
|
// Requires that printer flags have been added to cmd (see AddPrinterFlags).
|
||||||
|
PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error)
|
||||||
|
// One stop shopping for a Builder
|
||||||
|
NewBuilder() *resource.Builder
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -273,10 +293,17 @@ func makeInterfacesFor(versionList []unversioned.GroupVersion) func(version unve
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type factory struct {
|
||||||
|
flags *pflag.FlagSet
|
||||||
|
clientConfig clientcmd.ClientConfig
|
||||||
|
|
||||||
|
clients *ClientCache
|
||||||
|
}
|
||||||
|
|
||||||
// NewFactory creates a factory with the default Kubernetes resources defined
|
// NewFactory creates a factory with the default Kubernetes resources defined
|
||||||
// if optionalClientConfig is nil, then flags will be bound to a new clientcmd.ClientConfig.
|
// if optionalClientConfig is nil, then flags will be bound to a new clientcmd.ClientConfig.
|
||||||
// if optionalClientConfig is not nil, then this factory will make use of it.
|
// if optionalClientConfig is not nil, then this factory will make use of it.
|
||||||
func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
func NewFactory(optionalClientConfig clientcmd.ClientConfig) Factory {
|
||||||
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
|
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
|
||||||
flags.SetNormalizeFunc(utilflag.WarnWordSepNormalizeFunc) // Warn for "_" flags
|
flags.SetNormalizeFunc(utilflag.WarnWordSepNormalizeFunc) // Warn for "_" flags
|
||||||
|
|
||||||
@ -286,13 +313,19 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
clients := NewClientCache(clientConfig)
|
clients := NewClientCache(clientConfig)
|
||||||
|
return &factory{
|
||||||
return &Factory{
|
|
||||||
clients: clients,
|
|
||||||
flags: flags,
|
flags: flags,
|
||||||
|
clientConfig: clientConfig,
|
||||||
|
clients: clients,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Object: func() (meta.RESTMapper, runtime.ObjectTyper) {
|
func (f *factory) FlagSet() *pflag.FlagSet {
|
||||||
cfg, err := clientConfig.ClientConfig()
|
return f.flags
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *factory) Object() (meta.RESTMapper, runtime.ObjectTyper) {
|
||||||
|
cfg, err := f.clientConfig.ClientConfig()
|
||||||
checkErrWithPrefix("failed to get client config: ", err)
|
checkErrWithPrefix("failed to get client config: ", err)
|
||||||
cmdApiVersion := unversioned.GroupVersion{}
|
cmdApiVersion := unversioned.GroupVersion{}
|
||||||
if cfg.GroupVersion != nil {
|
if cfg.GroupVersion != nil {
|
||||||
@ -329,9 +362,10 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
// wrap with output preferences
|
// wrap with output preferences
|
||||||
mapper = kubectl.OutputVersionMapper{RESTMapper: mapper, OutputVersions: []unversioned.GroupVersion{cmdApiVersion}}
|
mapper = kubectl.OutputVersionMapper{RESTMapper: mapper, OutputVersions: []unversioned.GroupVersion{cmdApiVersion}}
|
||||||
return mapper, api.Scheme
|
return mapper, api.Scheme
|
||||||
},
|
}
|
||||||
UnstructuredObject: func() (meta.RESTMapper, runtime.ObjectTyper, error) {
|
|
||||||
cfg, err := clients.ClientConfigForVersion(nil)
|
func (f *factory) UnstructuredObject() (meta.RESTMapper, runtime.ObjectTyper, error) {
|
||||||
|
cfg, err := f.clients.ClientConfigForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -363,22 +397,26 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
typer := discovery.NewUnstructuredObjectTyper(groupResources)
|
typer := discovery.NewUnstructuredObjectTyper(groupResources)
|
||||||
|
|
||||||
return NewShortcutExpander(mapper, dc), typer, nil
|
return NewShortcutExpander(mapper, dc), typer, nil
|
||||||
},
|
}
|
||||||
RESTClient: func() (*restclient.RESTClient, error) {
|
|
||||||
clientConfig, err := clients.ClientConfigForVersion(nil)
|
func (f *factory) RESTClient() (*restclient.RESTClient, error) {
|
||||||
|
clientConfig, err := f.clients.ClientConfigForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return restclient.RESTClientFor(clientConfig)
|
return restclient.RESTClientFor(clientConfig)
|
||||||
},
|
}
|
||||||
ClientSet: func() (*internalclientset.Clientset, error) {
|
|
||||||
return clients.ClientSetForVersion(nil)
|
func (f *factory) ClientSet() (*internalclientset.Clientset, error) {
|
||||||
},
|
return f.clients.ClientSetForVersion(nil)
|
||||||
ClientConfig: func() (*restclient.Config, error) {
|
}
|
||||||
return clients.ClientConfigForVersion(nil)
|
|
||||||
},
|
func (f *factory) ClientConfig() (*restclient.Config, error) {
|
||||||
ClientForMapping: func(mapping *meta.RESTMapping) (resource.RESTClient, error) {
|
return f.clients.ClientConfigForVersion(nil)
|
||||||
cfg, err := clientConfig.ClientConfig()
|
}
|
||||||
|
|
||||||
|
func (f *factory) ClientForMapping(mapping *meta.RESTMapping) (resource.RESTClient, error) {
|
||||||
|
cfg, err := f.clientConfig.ClientConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -389,7 +427,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
switch gvk.Group {
|
switch gvk.Group {
|
||||||
case federation.GroupName:
|
case federation.GroupName:
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
return clients.FederationClientForVersion(&mappingVersion)
|
return f.clients.FederationClientForVersion(&mappingVersion)
|
||||||
case api.GroupName:
|
case api.GroupName:
|
||||||
cfg.APIPath = "/api"
|
cfg.APIPath = "/api"
|
||||||
default:
|
default:
|
||||||
@ -401,9 +439,10 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
cfg.NegotiatedSerializer = thirdpartyresourcedata.NewNegotiatedSerializer(api.Codecs, gvk.Kind, gv, gv)
|
cfg.NegotiatedSerializer = thirdpartyresourcedata.NewNegotiatedSerializer(api.Codecs, gvk.Kind, gv, gv)
|
||||||
}
|
}
|
||||||
return restclient.RESTClientFor(cfg)
|
return restclient.RESTClientFor(cfg)
|
||||||
},
|
}
|
||||||
UnstructuredClientForMapping: func(mapping *meta.RESTMapping) (resource.RESTClient, error) {
|
|
||||||
cfg, err := clientConfig.ClientConfig()
|
func (f *factory) UnstructuredClientForMapping(mapping *meta.RESTMapping) (resource.RESTClient, error) {
|
||||||
|
cfg, err := f.clientConfig.ClientConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -418,11 +457,12 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
cfg.ContentConfig = dynamic.ContentConfig()
|
cfg.ContentConfig = dynamic.ContentConfig()
|
||||||
cfg.GroupVersion = &gv
|
cfg.GroupVersion = &gv
|
||||||
return restclient.RESTClientFor(cfg)
|
return restclient.RESTClientFor(cfg)
|
||||||
},
|
}
|
||||||
Describer: func(mapping *meta.RESTMapping) (kubectl.Describer, error) {
|
|
||||||
|
func (f *factory) Describer(mapping *meta.RESTMapping) (kubectl.Describer, error) {
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
if mapping.GroupVersionKind.Group == federation.GroupName {
|
if mapping.GroupVersionKind.Group == federation.GroupName {
|
||||||
fedClientSet, err := clients.FederationClientSetForVersion(&mappingVersion)
|
fedClientSet, err := f.clients.FederationClientSetForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -430,7 +470,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
return &kubectl.ClusterDescriber{Interface: fedClientSet}, nil
|
return &kubectl.ClusterDescriber{Interface: fedClientSet}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clientset, err := clients.ClientSetForVersion(&mappingVersion)
|
clientset, err := f.clients.ClientSetForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -438,8 +478,9 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
return describer, nil
|
return describer, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("no description has been implemented for %q", mapping.GroupVersionKind.Kind)
|
return nil, fmt.Errorf("no description has been implemented for %q", mapping.GroupVersionKind.Kind)
|
||||||
},
|
}
|
||||||
Decoder: func(toInternal bool) runtime.Decoder {
|
|
||||||
|
func (f *factory) Decoder(toInternal bool) runtime.Decoder {
|
||||||
var decoder runtime.Decoder
|
var decoder runtime.Decoder
|
||||||
if toInternal {
|
if toInternal {
|
||||||
decoder = api.Codecs.UniversalDecoder()
|
decoder = api.Codecs.UniversalDecoder()
|
||||||
@ -447,15 +488,17 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
decoder = api.Codecs.UniversalDeserializer()
|
decoder = api.Codecs.UniversalDeserializer()
|
||||||
}
|
}
|
||||||
return thirdpartyresourcedata.NewDecoder(decoder, "")
|
return thirdpartyresourcedata.NewDecoder(decoder, "")
|
||||||
|
}
|
||||||
|
|
||||||
},
|
func (f *factory) JSONEncoder() runtime.Encoder {
|
||||||
JSONEncoder: func() runtime.Encoder {
|
|
||||||
return api.Codecs.LegacyCodec(registered.EnabledVersions()...)
|
return api.Codecs.LegacyCodec(registered.EnabledVersions()...)
|
||||||
},
|
}
|
||||||
Printer: func(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) {
|
|
||||||
|
func (f *factory) Printer(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) {
|
||||||
return kubectl.NewHumanReadablePrinter(options), nil
|
return kubectl.NewHumanReadablePrinter(options), nil
|
||||||
},
|
}
|
||||||
MapBasedSelectorForObject: func(object runtime.Object) (string, error) {
|
|
||||||
|
func (f *factory) MapBasedSelectorForObject(object runtime.Object) (string, error) {
|
||||||
// TODO: replace with a swagger schema based approach (identify pod selector via schema introspection)
|
// TODO: replace with a swagger schema based approach (identify pod selector via schema introspection)
|
||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
case *api.ReplicationController:
|
case *api.ReplicationController:
|
||||||
@ -491,8 +534,9 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
return "", fmt.Errorf("cannot extract pod selector from %v", gvks[0])
|
return "", fmt.Errorf("cannot extract pod selector from %v", gvks[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
PortsForObject: func(object runtime.Object) ([]string, error) {
|
|
||||||
|
func (f *factory) PortsForObject(object runtime.Object) ([]string, error) {
|
||||||
// TODO: replace with a swagger schema based approach (identify pod selector via schema introspection)
|
// TODO: replace with a swagger schema based approach (identify pod selector via schema introspection)
|
||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
case *api.ReplicationController:
|
case *api.ReplicationController:
|
||||||
@ -512,8 +556,9 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
return nil, fmt.Errorf("cannot extract ports from %v", gvks[0])
|
return nil, fmt.Errorf("cannot extract ports from %v", gvks[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
ProtocolsForObject: func(object runtime.Object) (map[string]string, error) {
|
|
||||||
|
func (f *factory) ProtocolsForObject(object runtime.Object) (map[string]string, error) {
|
||||||
// TODO: replace with a swagger schema based approach (identify pod selector via schema introspection)
|
// TODO: replace with a swagger schema based approach (identify pod selector via schema introspection)
|
||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
case *api.ReplicationController:
|
case *api.ReplicationController:
|
||||||
@ -533,12 +578,14 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
return nil, fmt.Errorf("cannot extract protocols from %v", gvks[0])
|
return nil, fmt.Errorf("cannot extract protocols from %v", gvks[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
LabelsForObject: func(object runtime.Object) (map[string]string, error) {
|
|
||||||
|
func (f *factory) LabelsForObject(object runtime.Object) (map[string]string, error) {
|
||||||
return meta.NewAccessor().Labels(object)
|
return meta.NewAccessor().Labels(object)
|
||||||
},
|
}
|
||||||
LogsForObject: func(object, options runtime.Object) (*restclient.Request, error) {
|
|
||||||
clientset, err := clients.ClientSetForVersion(nil)
|
func (f *factory) LogsForObject(object, options runtime.Object) (*restclient.Request, error) {
|
||||||
|
clientset, err := f.clients.ClientSetForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -595,9 +642,10 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
return nil, fmt.Errorf("cannot get the logs from %v", gvks[0])
|
return nil, fmt.Errorf("cannot get the logs from %v", gvks[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
PauseObject: func(object runtime.Object) (bool, error) {
|
|
||||||
clientset, err := clients.ClientSetForVersion(nil)
|
func (f *factory) PauseObject(object runtime.Object) (bool, error) {
|
||||||
|
clientset, err := f.clients.ClientSetForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@ -617,9 +665,10 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
return false, fmt.Errorf("cannot pause %v", gvks[0])
|
return false, fmt.Errorf("cannot pause %v", gvks[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
ResumeObject: func(object runtime.Object) (bool, error) {
|
|
||||||
clientset, err := clients.ClientSetForVersion(nil)
|
func (f *factory) ResumeObject(object runtime.Object) (bool, error) {
|
||||||
|
clientset, err := f.clients.ClientSetForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@ -639,50 +688,56 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
return false, fmt.Errorf("cannot resume %v", gvks[0])
|
return false, fmt.Errorf("cannot resume %v", gvks[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Scaler: func(mapping *meta.RESTMapping) (kubectl.Scaler, error) {
|
|
||||||
|
func (f *factory) Scaler(mapping *meta.RESTMapping) (kubectl.Scaler, error) {
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
clientset, err := clients.ClientSetForVersion(&mappingVersion)
|
clientset, err := f.clients.ClientSetForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return kubectl.ScalerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
return kubectl.ScalerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
||||||
},
|
}
|
||||||
Reaper: func(mapping *meta.RESTMapping) (kubectl.Reaper, error) {
|
|
||||||
|
func (f *factory) Reaper(mapping *meta.RESTMapping) (kubectl.Reaper, error) {
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
clientset, err := clients.ClientSetForVersion(&mappingVersion)
|
clientset, err := f.clients.ClientSetForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return kubectl.ReaperFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
return kubectl.ReaperFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
||||||
},
|
}
|
||||||
HistoryViewer: func(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error) {
|
|
||||||
|
func (f *factory) HistoryViewer(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error) {
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
clientset, err := clients.ClientSetForVersion(&mappingVersion)
|
clientset, err := f.clients.ClientSetForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return kubectl.HistoryViewerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
return kubectl.HistoryViewerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
||||||
},
|
}
|
||||||
Rollbacker: func(mapping *meta.RESTMapping) (kubectl.Rollbacker, error) {
|
|
||||||
|
func (f *factory) Rollbacker(mapping *meta.RESTMapping) (kubectl.Rollbacker, error) {
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
clientset, err := clients.ClientSetForVersion(&mappingVersion)
|
clientset, err := f.clients.ClientSetForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return kubectl.RollbackerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
return kubectl.RollbackerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
||||||
},
|
}
|
||||||
StatusViewer: func(mapping *meta.RESTMapping) (kubectl.StatusViewer, error) {
|
|
||||||
|
func (f *factory) StatusViewer(mapping *meta.RESTMapping) (kubectl.StatusViewer, error) {
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
clientset, err := clients.ClientSetForVersion(&mappingVersion)
|
clientset, err := f.clients.ClientSetForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return kubectl.StatusViewerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
return kubectl.StatusViewerFor(mapping.GroupVersionKind.GroupKind(), clientset)
|
||||||
},
|
}
|
||||||
Validator: func(validate bool, cacheDir string) (validation.Schema, error) {
|
|
||||||
|
func (f *factory) Validator(validate bool, cacheDir string) (validation.Schema, error) {
|
||||||
if validate {
|
if validate {
|
||||||
clientConfig, err := clients.ClientConfigForVersion(nil)
|
clientConfig, err := f.clients.ClientConfigForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -690,7 +745,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
clientset, err := clients.ClientSetForVersion(nil)
|
clientset, err := f.clients.ClientSetForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -703,7 +758,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
dir = "" // disable caching as a fallback
|
dir = "" // disable caching as a fallback
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fedClient, err := clients.FederationClientForVersion(nil)
|
fedClient, err := f.clients.FederationClientForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -714,22 +769,26 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
return validation.NullSchema{}, nil
|
return validation.NullSchema{}, nil
|
||||||
},
|
}
|
||||||
SwaggerSchema: func(gvk unversioned.GroupVersionKind) (*swagger.ApiDeclaration, error) {
|
|
||||||
|
func (f *factory) SwaggerSchema(gvk unversioned.GroupVersionKind) (*swagger.ApiDeclaration, error) {
|
||||||
version := gvk.GroupVersion()
|
version := gvk.GroupVersion()
|
||||||
clientset, err := clients.ClientSetForVersion(&version)
|
clientset, err := f.clients.ClientSetForVersion(&version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return clientset.Discovery().SwaggerSchema(version)
|
return clientset.Discovery().SwaggerSchema(version)
|
||||||
},
|
}
|
||||||
DefaultNamespace: func() (string, bool, error) {
|
|
||||||
return clientConfig.Namespace()
|
func (f *factory) DefaultNamespace() (string, bool, error) {
|
||||||
},
|
return f.clientConfig.Namespace()
|
||||||
Generators: func(cmdName string) map[string]kubectl.Generator {
|
}
|
||||||
|
|
||||||
|
func (f *factory) Generators(cmdName string) map[string]kubectl.Generator {
|
||||||
return DefaultGenerators(cmdName)
|
return DefaultGenerators(cmdName)
|
||||||
},
|
}
|
||||||
CanBeExposed: func(kind unversioned.GroupKind) error {
|
|
||||||
|
func (f *factory) CanBeExposed(kind unversioned.GroupKind) error {
|
||||||
switch kind {
|
switch kind {
|
||||||
case api.Kind("ReplicationController"), api.Kind("Service"), api.Kind("Pod"), extensions.Kind("Deployment"), extensions.Kind("ReplicaSet"):
|
case api.Kind("ReplicationController"), api.Kind("Service"), api.Kind("Pod"), extensions.Kind("Deployment"), extensions.Kind("ReplicaSet"):
|
||||||
// nothing to do here
|
// nothing to do here
|
||||||
@ -737,8 +796,9 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
return fmt.Errorf("cannot expose a %s", kind)
|
return fmt.Errorf("cannot expose a %s", kind)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
}
|
||||||
CanBeAutoscaled: func(kind unversioned.GroupKind) error {
|
|
||||||
|
func (f *factory) CanBeAutoscaled(kind unversioned.GroupKind) error {
|
||||||
switch kind {
|
switch kind {
|
||||||
case api.Kind("ReplicationController"), extensions.Kind("Deployment"), extensions.Kind("ReplicaSet"):
|
case api.Kind("ReplicationController"), extensions.Kind("Deployment"), extensions.Kind("ReplicaSet"):
|
||||||
// nothing to do here
|
// nothing to do here
|
||||||
@ -746,9 +806,10 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
return fmt.Errorf("cannot autoscale a %v", kind)
|
return fmt.Errorf("cannot autoscale a %v", kind)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
}
|
||||||
AttachablePodForObject: func(object runtime.Object) (*api.Pod, error) {
|
|
||||||
clientset, err := clients.ClientSetForVersion(nil)
|
func (f *factory) AttachablePodForObject(object runtime.Object) (*api.Pod, error) {
|
||||||
|
clientset, err := f.clients.ClientSetForVersion(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -783,9 +844,9 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
}
|
}
|
||||||
return nil, fmt.Errorf("cannot attach to %v: not implemented", gvks[0])
|
return nil, fmt.Errorf("cannot attach to %v: not implemented", gvks[0])
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
// UpdatePodSpecForObject update the pod specification for the provided object
|
|
||||||
UpdatePodSpecForObject: func(obj runtime.Object, fn func(*api.PodSpec) error) (bool, error) {
|
func (f *factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*api.PodSpec) error) (bool, error) {
|
||||||
// TODO: replace with a swagger schema based approach (identify pod template via schema introspection)
|
// TODO: replace with a swagger schema based approach (identify pod template via schema introspection)
|
||||||
switch t := obj.(type) {
|
switch t := obj.(type) {
|
||||||
case *api.Pod:
|
case *api.Pod:
|
||||||
@ -808,11 +869,13 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
|||||||
default:
|
default:
|
||||||
return false, fmt.Errorf("the object is not a pod or does not have a pod template")
|
return false, fmt.Errorf("the object is not a pod or does not have a pod template")
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
EditorEnvs: func() []string {
|
|
||||||
|
func (f *factory) EditorEnvs() []string {
|
||||||
return []string{"KUBE_EDITOR", "EDITOR"}
|
return []string{"KUBE_EDITOR", "EDITOR"}
|
||||||
},
|
}
|
||||||
PrintObjectSpecificMessage: func(obj runtime.Object, out io.Writer) {
|
|
||||||
|
func (f *factory) PrintObjectSpecificMessage(obj runtime.Object, out io.Writer) {
|
||||||
switch obj := obj.(type) {
|
switch obj := obj.(type) {
|
||||||
case *api.Service:
|
case *api.Service:
|
||||||
if obj.Spec.Type == api.ServiceTypeNodePort {
|
if obj.Spec.Type == api.ServiceTypeNodePort {
|
||||||
@ -838,8 +901,6 @@ See http://kubernetes.io/docs/user-guide/services-firewalls for more details.
|
|||||||
out.Write([]byte(msg))
|
out.Write([]byte(msg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFirstPod returns a pod matching the namespace and label selector
|
// GetFirstPod returns a pod matching the namespace and label selector
|
||||||
@ -883,10 +944,8 @@ func GetFirstPod(client coreclient.PodsGetter, namespace string, selector labels
|
|||||||
return pod, 1, nil
|
return pod, 1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Command will stringify and return all environment arguments ie. a command run by a client
|
|
||||||
// using the factory.
|
|
||||||
// TODO: We need to filter out stuff like secrets.
|
// TODO: We need to filter out stuff like secrets.
|
||||||
func (f *Factory) Command() string {
|
func (f *factory) Command() string {
|
||||||
if len(os.Args) == 0 {
|
if len(os.Args) == 0 {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@ -895,8 +954,7 @@ func (f *Factory) Command() string {
|
|||||||
return strings.Join(args, " ")
|
return strings.Join(args, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
// BindFlags adds any flags that are common to all kubectl sub commands.
|
func (f *factory) BindFlags(flags *pflag.FlagSet) {
|
||||||
func (f *Factory) BindFlags(flags *pflag.FlagSet) {
|
|
||||||
// Merge factory's flags
|
// Merge factory's flags
|
||||||
flags.AddFlagSet(f.flags)
|
flags.AddFlagSet(f.flags)
|
||||||
|
|
||||||
@ -911,8 +969,7 @@ func (f *Factory) BindFlags(flags *pflag.FlagSet) {
|
|||||||
flags.SetNormalizeFunc(utilflag.WordSepNormalizeFunc)
|
flags.SetNormalizeFunc(utilflag.WordSepNormalizeFunc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// BindCommonFlags adds any flags defined by external projects (not part of pflags)
|
func (f *factory) BindExternalFlags(flags *pflag.FlagSet) {
|
||||||
func (f *Factory) BindExternalFlags(flags *pflag.FlagSet) {
|
|
||||||
// any flags defined by external projects (not part of pflags)
|
// any flags defined by external projects (not part of pflags)
|
||||||
flags.AddGoFlagSet(flag.CommandLine)
|
flags.AddGoFlagSet(flag.CommandLine)
|
||||||
}
|
}
|
||||||
@ -1179,7 +1236,7 @@ func DefaultClientConfig(flags *pflag.FlagSet) clientcmd.ClientConfig {
|
|||||||
return clientConfig
|
return clientConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Factory) DefaultResourceFilterOptions(cmd *cobra.Command, withNamespace bool) *kubectl.PrintOptions {
|
func (f *factory) DefaultResourceFilterOptions(cmd *cobra.Command, withNamespace bool) *kubectl.PrintOptions {
|
||||||
columnLabel, err := cmd.Flags().GetStringSlice("label-columns")
|
columnLabel, err := cmd.Flags().GetStringSlice("label-columns")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
columnLabel = []string{}
|
columnLabel = []string{}
|
||||||
@ -1197,13 +1254,11 @@ func (f *Factory) DefaultResourceFilterOptions(cmd *cobra.Command, withNamespace
|
|||||||
return opts
|
return opts
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultResourceFilterFunc returns a collection of FilterFuncs suitable for filtering specific resource types.
|
func (f *factory) DefaultResourceFilterFunc() kubectl.Filters {
|
||||||
func (f *Factory) DefaultResourceFilterFunc() kubectl.Filters {
|
|
||||||
return kubectl.NewResourceFilter()
|
return kubectl.NewResourceFilter()
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrintObject prints an api object given command line flags to modify the output format
|
func (f *factory) PrintObject(cmd *cobra.Command, mapper meta.RESTMapper, obj runtime.Object, out io.Writer) error {
|
||||||
func (f *Factory) PrintObject(cmd *cobra.Command, mapper meta.RESTMapper, obj runtime.Object, out io.Writer) error {
|
|
||||||
gvks, _, err := api.Scheme.ObjectKinds(obj)
|
gvks, _, err := api.Scheme.ObjectKinds(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -1221,9 +1276,7 @@ func (f *Factory) PrintObject(cmd *cobra.Command, mapper meta.RESTMapper, obj ru
|
|||||||
return printer.PrintObj(obj, out)
|
return printer.PrintObj(obj, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterForMapping returns a printer suitable for displaying the provided resource type.
|
func (f *factory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error) {
|
||||||
// Requires that printer flags have been added to cmd (see AddPrinterFlags).
|
|
||||||
func (f *Factory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error) {
|
|
||||||
printer, ok, err := PrinterForCommand(cmd)
|
printer, ok, err := PrinterForCommand(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -1273,8 +1326,7 @@ func (f *Factory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMappin
|
|||||||
return printer, nil
|
return printer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// One stop shopping for a Builder
|
func (f *factory) NewBuilder() *resource.Builder {
|
||||||
func (f *Factory) NewBuilder() *resource.Builder {
|
|
||||||
mapper, typer := f.Object()
|
mapper, typer := f.Object()
|
||||||
|
|
||||||
return resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true))
|
return resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true))
|
||||||
|
@ -55,7 +55,7 @@ import (
|
|||||||
func TestNewFactoryDefaultFlagBindings(t *testing.T) {
|
func TestNewFactoryDefaultFlagBindings(t *testing.T) {
|
||||||
factory := NewFactory(nil)
|
factory := NewFactory(nil)
|
||||||
|
|
||||||
if !factory.flags.HasFlags() {
|
if !factory.FlagSet().HasFlags() {
|
||||||
t.Errorf("Expected flags, but didn't get any")
|
t.Errorf("Expected flags, but didn't get any")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,8 +64,8 @@ func TestNewFactoryNoFlagBindings(t *testing.T) {
|
|||||||
clientConfig := clientcmd.NewDefaultClientConfig(*clientcmdapi.NewConfig(), &clientcmd.ConfigOverrides{})
|
clientConfig := clientcmd.NewDefaultClientConfig(*clientcmdapi.NewConfig(), &clientcmd.ConfigOverrides{})
|
||||||
factory := NewFactory(clientConfig)
|
factory := NewFactory(clientConfig)
|
||||||
|
|
||||||
if factory.flags.HasFlags() {
|
if factory.FlagSet().HasFlags() {
|
||||||
t.Errorf("Expected zero flags, but got %v", factory.flags)
|
t.Errorf("Expected zero flags, but got %v", factory.FlagSet())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,12 +229,12 @@ func TestCanBeExposed(t *testing.T) {
|
|||||||
func TestFlagUnderscoreRenaming(t *testing.T) {
|
func TestFlagUnderscoreRenaming(t *testing.T) {
|
||||||
factory := NewFactory(nil)
|
factory := NewFactory(nil)
|
||||||
|
|
||||||
factory.flags.SetNormalizeFunc(flag.WordSepNormalizeFunc)
|
factory.FlagSet().SetNormalizeFunc(flag.WordSepNormalizeFunc)
|
||||||
factory.flags.Bool("valid_flag", false, "bool value")
|
factory.FlagSet().Bool("valid_flag", false, "bool value")
|
||||||
|
|
||||||
// In case of failure of this test check this PR: spf13/pflag#23
|
// In case of failure of this test check this PR: spf13/pflag#23
|
||||||
if factory.flags.Lookup("valid_flag").Name != "valid-flag" {
|
if factory.FlagSet().Lookup("valid_flag").Name != "valid-flag" {
|
||||||
t.Fatalf("Expected flag name to be valid-flag, got %s", factory.flags.Lookup("valid_flag").Name)
|
t.Fatalf("Expected flag name to be valid-flag, got %s", factory.FlagSet().Lookup("valid_flag").Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdVersion(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
func NewCmdVersion(f cmdutil.Factory, out io.Writer) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "version",
|
Use: "version",
|
||||||
Short: "Print the client and server version information",
|
Short: "Print the client and server version information",
|
||||||
@ -40,7 +40,7 @@ func NewCmdVersion(f *cmdutil.Factory, out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunVersion(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command) error {
|
func RunVersion(f cmdutil.Factory, out io.Writer, cmd *cobra.Command) error {
|
||||||
kubectl.GetClientVersion(out)
|
kubectl.GetClientVersion(out)
|
||||||
if cmdutil.GetFlagBool(cmd, "client") {
|
if cmdutil.GetFlagBool(cmd, "client") {
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user