mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #64118 from deads2k/cli-65-podspec
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. move updatepodspecforobject out of factory Updating a podspec is a polymorphic helper, but it isn't a factory method. @kubernetes/sig-cli-maintainers /assign @juanvallejo ```release-note NONE ```
This commit is contained in:
		@@ -27,6 +27,7 @@ go_library(
 | 
				
			|||||||
        "//pkg/kubectl/genericclioptions:go_default_library",
 | 
					        "//pkg/kubectl/genericclioptions:go_default_library",
 | 
				
			||||||
        "//pkg/kubectl/genericclioptions/printers:go_default_library",
 | 
					        "//pkg/kubectl/genericclioptions/printers:go_default_library",
 | 
				
			||||||
        "//pkg/kubectl/genericclioptions/resource:go_default_library",
 | 
					        "//pkg/kubectl/genericclioptions/resource:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/kubectl/polymorphichelpers:go_default_library",
 | 
				
			||||||
        "//pkg/kubectl/scheme:go_default_library",
 | 
					        "//pkg/kubectl/scheme:go_default_library",
 | 
				
			||||||
        "//pkg/kubectl/util/i18n:go_default_library",
 | 
					        "//pkg/kubectl/util/i18n:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
					        "//vendor/github.com/golang/glog:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,6 +36,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
						"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -114,7 +115,7 @@ type EnvOptions struct {
 | 
				
			|||||||
	output                 string
 | 
						output                 string
 | 
				
			||||||
	dryRun                 bool
 | 
						dryRun                 bool
 | 
				
			||||||
	builder                func() *resource.Builder
 | 
						builder                func() *resource.Builder
 | 
				
			||||||
	updatePodSpecForObject func(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error)
 | 
						updatePodSpecForObject polymorphichelpers.UpdatePodSpecForObjectFunc
 | 
				
			||||||
	namespace              string
 | 
						namespace              string
 | 
				
			||||||
	enforceNamespace       bool
 | 
						enforceNamespace       bool
 | 
				
			||||||
	clientset              *kubernetes.Clientset
 | 
						clientset              *kubernetes.Clientset
 | 
				
			||||||
@@ -192,7 +193,7 @@ func (o *EnvOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []stri
 | 
				
			|||||||
		return fmt.Errorf("all resources must be specified before environment changes: %s", strings.Join(args, " "))
 | 
							return fmt.Errorf("all resources must be specified before environment changes: %s", strings.Join(args, " "))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o.updatePodSpecForObject = f.UpdatePodSpecForObject
 | 
						o.updatePodSpecForObject = polymorphichelpers.UpdatePodSpecForObjectFn
 | 
				
			||||||
	o.output = cmdutil.GetFlagString(cmd, "output")
 | 
						o.output = cmdutil.GetFlagString(cmd, "output")
 | 
				
			||||||
	o.dryRun = cmdutil.GetDryRunFlag(cmd)
 | 
						o.dryRun = cmdutil.GetDryRunFlag(cmd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
						"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/util/i18n"
 | 
						"k8s.io/kubernetes/pkg/kubectl/util/i18n"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -54,7 +55,7 @@ type SetImageOptions struct {
 | 
				
			|||||||
	PrintObj printers.ResourcePrinterFunc
 | 
						PrintObj printers.ResourcePrinterFunc
 | 
				
			||||||
	Recorder genericclioptions.Recorder
 | 
						Recorder genericclioptions.Recorder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UpdatePodSpecForObject func(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error)
 | 
						UpdatePodSpecForObject polymorphichelpers.UpdatePodSpecForObjectFunc
 | 
				
			||||||
	Resources              []string
 | 
						Resources              []string
 | 
				
			||||||
	ContainerImages        map[string]string
 | 
						ContainerImages        map[string]string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -134,7 +135,7 @@ func (o *SetImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o.UpdatePodSpecForObject = f.UpdatePodSpecForObject
 | 
						o.UpdatePodSpecForObject = polymorphichelpers.UpdatePodSpecForObjectFn
 | 
				
			||||||
	o.DryRun = cmdutil.GetDryRunFlag(cmd)
 | 
						o.DryRun = cmdutil.GetDryRunFlag(cmd)
 | 
				
			||||||
	o.Output = cmdutil.GetFlagString(cmd, "output")
 | 
						o.Output = cmdutil.GetFlagString(cmd, "output")
 | 
				
			||||||
	o.ResolveImage = f.ResolveImage
 | 
						o.ResolveImage = f.ResolveImage
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
						"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/util/i18n"
 | 
						"k8s.io/kubernetes/pkg/kubectl/util/i18n"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -83,7 +84,7 @@ type SetResourcesOptions struct {
 | 
				
			|||||||
	Requests             string
 | 
						Requests             string
 | 
				
			||||||
	ResourceRequirements v1.ResourceRequirements
 | 
						ResourceRequirements v1.ResourceRequirements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UpdatePodSpecForObject func(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error)
 | 
						UpdatePodSpecForObject polymorphichelpers.UpdatePodSpecForObjectFunc
 | 
				
			||||||
	Resources              []string
 | 
						Resources              []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	genericclioptions.IOStreams
 | 
						genericclioptions.IOStreams
 | 
				
			||||||
@@ -152,7 +153,7 @@ func (o *SetResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, ar
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o.UpdatePodSpecForObject = f.UpdatePodSpecForObject
 | 
						o.UpdatePodSpecForObject = polymorphichelpers.UpdatePodSpecForObjectFn
 | 
				
			||||||
	o.Output = cmdutil.GetFlagString(cmd, "output")
 | 
						o.Output = cmdutil.GetFlagString(cmd, "output")
 | 
				
			||||||
	o.DryRun = cmdutil.GetDryRunFlag(cmd)
 | 
						o.DryRun = cmdutil.GetDryRunFlag(cmd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
						"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
						"k8s.io/kubernetes/pkg/kubectl/scheme"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubectl/util/i18n"
 | 
						"k8s.io/kubernetes/pkg/kubectl/util/i18n"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -66,7 +67,7 @@ type SetServiceAccountOptions struct {
 | 
				
			|||||||
	all                    bool
 | 
						all                    bool
 | 
				
			||||||
	output                 string
 | 
						output                 string
 | 
				
			||||||
	local                  bool
 | 
						local                  bool
 | 
				
			||||||
	updatePodSpecForObject func(runtime.Object, func(*v1.PodSpec) error) (bool, error)
 | 
						updatePodSpecForObject polymorphichelpers.UpdatePodSpecForObjectFunc
 | 
				
			||||||
	infos                  []*resource.Info
 | 
						infos                  []*resource.Info
 | 
				
			||||||
	serviceAccountName     string
 | 
						serviceAccountName     string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -129,7 +130,7 @@ func (o *SetServiceAccountOptions) Complete(f cmdutil.Factory, cmd *cobra.Comman
 | 
				
			|||||||
	o.shortOutput = cmdutil.GetFlagString(cmd, "output") == "name"
 | 
						o.shortOutput = cmdutil.GetFlagString(cmd, "output") == "name"
 | 
				
			||||||
	o.dryRun = cmdutil.GetDryRunFlag(cmd)
 | 
						o.dryRun = cmdutil.GetDryRunFlag(cmd)
 | 
				
			||||||
	o.output = cmdutil.GetFlagString(cmd, "output")
 | 
						o.output = cmdutil.GetFlagString(cmd, "output")
 | 
				
			||||||
	o.updatePodSpecForObject = f.UpdatePodSpecForObject
 | 
						o.updatePodSpecForObject = polymorphichelpers.UpdatePodSpecForObjectFn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if o.dryRun {
 | 
						if o.dryRun {
 | 
				
			||||||
		o.PrintFlags.Complete("%s (dry run)")
 | 
							o.PrintFlags.Complete("%s (dry run)")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,11 +36,9 @@ go_library(
 | 
				
			|||||||
        "//vendor/github.com/spf13/pflag:go_default_library",
 | 
					        "//vendor/github.com/spf13/pflag:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/apps/v1:go_default_library",
 | 
					        "//vendor/k8s.io/api/apps/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/apps/v1beta1:go_default_library",
 | 
					        "//vendor/k8s.io/api/apps/v1beta1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/apps/v1beta2:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/api/batch/v1:go_default_library",
 | 
					        "//vendor/k8s.io/api/batch/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/batch/v1beta1:go_default_library",
 | 
					        "//vendor/k8s.io/api/batch/v1beta1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/batch/v2alpha1:go_default_library",
 | 
					        "//vendor/k8s.io/api/batch/v2alpha1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
					        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,6 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
@@ -79,10 +78,6 @@ type ClientAccessFactory interface {
 | 
				
			|||||||
	// and which implements the common patterns for CLI interactions with generic resources.
 | 
						// and which implements the common patterns for CLI interactions with generic resources.
 | 
				
			||||||
	NewBuilder() *resource.Builder
 | 
						NewBuilder() *resource.Builder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 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.
 | 
					 | 
				
			||||||
	UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, 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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,14 +26,11 @@ import (
 | 
				
			|||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
	"github.com/spf13/pflag"
 | 
						"github.com/spf13/pflag"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	appsv1 "k8s.io/api/apps/v1"
 | 
						appsv1 "k8s.io/api/apps/v1"
 | 
				
			||||||
	appsv1beta1 "k8s.io/api/apps/v1beta1"
 | 
						appsv1beta1 "k8s.io/api/apps/v1beta1"
 | 
				
			||||||
	appsv1beta2 "k8s.io/api/apps/v1beta2"
 | 
					 | 
				
			||||||
	batchv1 "k8s.io/api/batch/v1"
 | 
						batchv1 "k8s.io/api/batch/v1"
 | 
				
			||||||
	batchv1beta1 "k8s.io/api/batch/v1beta1"
 | 
						batchv1beta1 "k8s.io/api/batch/v1beta1"
 | 
				
			||||||
	batchv2alpha1 "k8s.io/api/batch/v2alpha1"
 | 
						batchv2alpha1 "k8s.io/api/batch/v2alpha1"
 | 
				
			||||||
@@ -129,67 +126,6 @@ func (f *ring0Factory) RESTClient() (*restclient.RESTClient, error) {
 | 
				
			|||||||
	return restclient.RESTClientFor(clientConfig)
 | 
						return restclient.RESTClientFor(clientConfig)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (f *ring0Factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error) {
 | 
					 | 
				
			||||||
	// TODO: replace with a swagger schema based approach (identify pod template via schema introspection)
 | 
					 | 
				
			||||||
	switch t := obj.(type) {
 | 
					 | 
				
			||||||
	case *v1.Pod:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec)
 | 
					 | 
				
			||||||
	// ReplicationController
 | 
					 | 
				
			||||||
	case *v1.ReplicationController:
 | 
					 | 
				
			||||||
		if t.Spec.Template == nil {
 | 
					 | 
				
			||||||
			t.Spec.Template = &v1.PodTemplateSpec{}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Deployment
 | 
					 | 
				
			||||||
	case *extensionsv1beta1.Deployment:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1beta1.Deployment:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1beta2.Deployment:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1.Deployment:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// DaemonSet
 | 
					 | 
				
			||||||
	case *extensionsv1beta1.DaemonSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1beta2.DaemonSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1.DaemonSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// ReplicaSet
 | 
					 | 
				
			||||||
	case *extensionsv1beta1.ReplicaSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1beta2.ReplicaSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1.ReplicaSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// StatefulSet
 | 
					 | 
				
			||||||
	case *appsv1beta1.StatefulSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1beta2.StatefulSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *appsv1.StatefulSet:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Job
 | 
					 | 
				
			||||||
	case *batchv1.Job:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.Template.Spec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// CronJob
 | 
					 | 
				
			||||||
	case *batchv1beta1.CronJob:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
 | 
					 | 
				
			||||||
	case *batchv2alpha1.CronJob:
 | 
					 | 
				
			||||||
		return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		return false, fmt.Errorf("the object is not a pod or does not have a pod template: %T", t)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (f *ring0Factory) MapBasedSelectorForObject(object runtime.Object) (string, error) {
 | 
					func (f *ring0Factory) 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) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ go_library(
 | 
				
			|||||||
        "interface.go",
 | 
					        "interface.go",
 | 
				
			||||||
        "logsforobject.go",
 | 
					        "logsforobject.go",
 | 
				
			||||||
        "statusviewer.go",
 | 
					        "statusviewer.go",
 | 
				
			||||||
 | 
					        "updatepodspec.go",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    importpath = "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers",
 | 
					    importpath = "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers",
 | 
				
			||||||
    visibility = ["//visibility:public"],
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
@@ -27,6 +28,8 @@ go_library(
 | 
				
			|||||||
        "//vendor/k8s.io/api/apps/v1beta1:go_default_library",
 | 
					        "//vendor/k8s.io/api/apps/v1beta1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/apps/v1beta2:go_default_library",
 | 
					        "//vendor/k8s.io/api/apps/v1beta2:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/batch/v1:go_default_library",
 | 
					        "//vendor/k8s.io/api/batch/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/api/batch/v1beta1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/api/batch/v2alpha1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
					        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
					        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ package polymorphichelpers
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/client-go/rest"
 | 
						"k8s.io/client-go/rest"
 | 
				
			||||||
@@ -50,3 +51,10 @@ type StatusViewerFunc func(restClientGetter genericclioptions.RESTClientGetter,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// StatusViewerFn gives a way to easily override the function for unit testing if needed
 | 
					// StatusViewerFn gives a way to easily override the function for unit testing if needed
 | 
				
			||||||
var StatusViewerFn StatusViewerFunc = statusViewer
 | 
					var StatusViewerFn StatusViewerFunc = statusViewer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UpdatePodSpecForObjectFunc will call the provided function on the pod spec this object supports,
 | 
				
			||||||
 | 
					// return false if no pod spec is supported, or return an error.
 | 
				
			||||||
 | 
					type UpdatePodSpecForObjectFunc func(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UpdatePodSpecForObjectFn gives a way to easily override the function for unit testing if needed
 | 
				
			||||||
 | 
					var UpdatePodSpecForObjectFn UpdatePodSpecForObjectFunc = updatePodSpecForObject
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										91
									
								
								pkg/kubectl/polymorphichelpers/updatepodspec.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								pkg/kubectl/polymorphichelpers/updatepodspec.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2018 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package polymorphichelpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						appsv1 "k8s.io/api/apps/v1"
 | 
				
			||||||
 | 
						appsv1beta1 "k8s.io/api/apps/v1beta1"
 | 
				
			||||||
 | 
						appsv1beta2 "k8s.io/api/apps/v1beta2"
 | 
				
			||||||
 | 
						batchv1 "k8s.io/api/batch/v1"
 | 
				
			||||||
 | 
						batchv1beta1 "k8s.io/api/batch/v1beta1"
 | 
				
			||||||
 | 
						batchv2alpha1 "k8s.io/api/batch/v2alpha1"
 | 
				
			||||||
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
 | 
						extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func updatePodSpecForObject(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error) {
 | 
				
			||||||
 | 
						switch t := obj.(type) {
 | 
				
			||||||
 | 
						case *v1.Pod:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec)
 | 
				
			||||||
 | 
							// ReplicationController
 | 
				
			||||||
 | 
						case *v1.ReplicationController:
 | 
				
			||||||
 | 
							if t.Spec.Template == nil {
 | 
				
			||||||
 | 
								t.Spec.Template = &v1.PodTemplateSpec{}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Deployment
 | 
				
			||||||
 | 
						case *extensionsv1beta1.Deployment:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1beta1.Deployment:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1beta2.Deployment:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1.Deployment:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// DaemonSet
 | 
				
			||||||
 | 
						case *extensionsv1beta1.DaemonSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1beta2.DaemonSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1.DaemonSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// ReplicaSet
 | 
				
			||||||
 | 
						case *extensionsv1beta1.ReplicaSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1beta2.ReplicaSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1.ReplicaSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// StatefulSet
 | 
				
			||||||
 | 
						case *appsv1beta1.StatefulSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1beta2.StatefulSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *appsv1.StatefulSet:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Job
 | 
				
			||||||
 | 
						case *batchv1.Job:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.Template.Spec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// CronJob
 | 
				
			||||||
 | 
						case *batchv1beta1.CronJob:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
 | 
				
			||||||
 | 
						case *batchv2alpha1.CronJob:
 | 
				
			||||||
 | 
							return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return false, fmt.Errorf("the object is not a pod or does not have a pod template: %T", t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user