mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-30 21:30:16 +00:00 
			
		
		
		
	Refactored runtime.Object helper functions into subpkg
Organized functions that abstract the access of k8s.io/apimachinery/pkg/runtime.Objects into a framework subpackge. Signed-off-by: Jorge Alarcon Ochoa <alarcj137@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 alejandrox1
						alejandrox1
					
				
			
			
				
	
			
			
			
						parent
						
							5a7b978c74
						
					
				
				
					commit
					4147d727a6
				
			| @@ -34,10 +34,7 @@ go_library( | ||||
|     importpath = "k8s.io/kubernetes/test/e2e/framework", | ||||
|     deps = [ | ||||
|         "//pkg/api/v1/pod:go_default_library", | ||||
|         "//pkg/apis/apps:go_default_library", | ||||
|         "//pkg/apis/batch:go_default_library", | ||||
|         "//pkg/apis/core:go_default_library", | ||||
|         "//pkg/apis/extensions:go_default_library", | ||||
|         "//pkg/apis/storage/v1/util:go_default_library", | ||||
|         "//pkg/client/conditions:go_default_library", | ||||
|         "//pkg/controller:go_default_library", | ||||
| @@ -60,9 +57,7 @@ go_library( | ||||
|         "//pkg/volume/util:go_default_library", | ||||
|         "//staging/src/k8s.io/api/apps/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/apps/v1beta2:go_default_library", | ||||
|         "//staging/src/k8s.io/api/batch/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/core/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/rbac/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/storage/v1:go_default_library", | ||||
| @@ -109,6 +104,7 @@ go_library( | ||||
|         "//test/e2e/framework/metrics:go_default_library", | ||||
|         "//test/e2e/framework/node:go_default_library", | ||||
|         "//test/e2e/framework/pod:go_default_library", | ||||
|         "//test/e2e/framework/resource:go_default_library", | ||||
|         "//test/e2e/framework/ssh:go_default_library", | ||||
|         "//test/e2e/framework/testfiles:go_default_library", | ||||
|         "//test/e2e/manifest:go_default_library", | ||||
| @@ -160,6 +156,7 @@ filegroup( | ||||
|         "//test/e2e/framework/providers/openstack:all-srcs", | ||||
|         "//test/e2e/framework/providers/vsphere:all-srcs", | ||||
|         "//test/e2e/framework/replicaset:all-srcs", | ||||
|         "//test/e2e/framework/resource:all-srcs", | ||||
|         "//test/e2e/framework/ssh:all-srcs", | ||||
|         "//test/e2e/framework/testfiles:all-srcs", | ||||
|         "//test/e2e/framework/timer:all-srcs", | ||||
|   | ||||
| @@ -4,35 +4,27 @@ go_library( | ||||
|     name = "go_default_library", | ||||
|     srcs = [ | ||||
|         "resource.go", | ||||
|         "runtimeobject.go", | ||||
|         "wait.go", | ||||
|     ], | ||||
|     importpath = "k8s.io/kubernetes/test/e2e/framework/pod", | ||||
|     visibility = ["//visibility:public"], | ||||
|     deps = [ | ||||
|         "//pkg/api/v1/pod:go_default_library", | ||||
|         "//pkg/apis/apps:go_default_library", | ||||
|         "//pkg/apis/batch:go_default_library", | ||||
|         "//pkg/apis/core:go_default_library", | ||||
|         "//pkg/apis/extensions:go_default_library", | ||||
|         "//pkg/client/conditions:go_default_library", | ||||
|         "//pkg/controller:go_default_library", | ||||
|         "//pkg/kubelet/pod:go_default_library", | ||||
|         "//pkg/kubelet/util/format:go_default_library", | ||||
|         "//staging/src/k8s.io/api/apps/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/batch/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/core/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/kubernetes:go_default_library", | ||||
|         "//test/e2e/framework/log:go_default_library", | ||||
|         "//test/e2e/framework/resource:go_default_library", | ||||
|         "//test/utils:go_default_library", | ||||
|         "//test/utils/image:go_default_library", | ||||
|         "//vendor/github.com/onsi/ginkgo:go_default_library", | ||||
|   | ||||
| @@ -38,6 +38,7 @@ import ( | ||||
| 	"k8s.io/kubernetes/pkg/controller" | ||||
| 	"k8s.io/kubernetes/pkg/kubelet/util/format" | ||||
| 	e2elog "k8s.io/kubernetes/test/e2e/framework/log" | ||||
| 	e2eresource "k8s.io/kubernetes/test/e2e/framework/resource" | ||||
| 	testutils "k8s.io/kubernetes/test/utils" | ||||
| ) | ||||
|  | ||||
| @@ -456,15 +457,15 @@ func PodsResponding(c clientset.Interface, ns, name string, wantName bool, pods | ||||
|  | ||||
| // WaitForControlledPodsRunning waits up to 10 minutes for pods to become Running. | ||||
| func WaitForControlledPodsRunning(c clientset.Interface, ns, name string, kind schema.GroupKind) error { | ||||
| 	rtObject, err := getRuntimeObjectForKind(c, kind, ns, name) | ||||
| 	rtObject, err := e2eresource.GetRuntimeObjectForKind(c, kind, ns, name) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	selector, err := getSelectorFromRuntimeObject(rtObject) | ||||
| 	selector, err := e2eresource.GetSelectorFromRuntimeObject(rtObject) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	replicas, err := getReplicasFromRuntimeObject(rtObject) | ||||
| 	replicas, err := e2eresource.GetReplicasFromRuntimeObject(rtObject) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -477,11 +478,11 @@ func WaitForControlledPodsRunning(c clientset.Interface, ns, name string, kind s | ||||
|  | ||||
| // WaitForControlledPods waits up to podListTimeout for getting pods of the specified controller name and return them. | ||||
| func WaitForControlledPods(c clientset.Interface, ns, name string, kind schema.GroupKind) (pods *v1.PodList, err error) { | ||||
| 	rtObject, err := getRuntimeObjectForKind(c, kind, ns, name) | ||||
| 	rtObject, err := e2eresource.GetRuntimeObjectForKind(c, kind, ns, name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	selector, err := getSelectorFromRuntimeObject(rtObject) | ||||
| 	selector, err := e2eresource.GetSelectorFromRuntimeObject(rtObject) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										37
									
								
								test/e2e/framework/resource/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								test/e2e/framework/resource/BUILD
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_library( | ||||
|     name = "go_default_library", | ||||
|     srcs = ["runtimeobj.go"], | ||||
|     importpath = "k8s.io/kubernetes/test/e2e/framework/resource", | ||||
|     visibility = ["//visibility:public"], | ||||
|     deps = [ | ||||
|         "//pkg/apis/apps:go_default_library", | ||||
|         "//pkg/apis/batch:go_default_library", | ||||
|         "//pkg/apis/core:go_default_library", | ||||
|         "//pkg/apis/extensions:go_default_library", | ||||
|         "//staging/src/k8s.io/api/apps/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/batch/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/core/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", | ||||
|         "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", | ||||
|         "//staging/src/k8s.io/client-go/kubernetes:go_default_library", | ||||
|     ], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "package-srcs", | ||||
|     srcs = glob(["**"]), | ||||
|     tags = ["automanaged"], | ||||
|     visibility = ["//visibility:private"], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "all-srcs", | ||||
|     srcs = [":package-srcs"], | ||||
|     tags = ["automanaged"], | ||||
|     visibility = ["//visibility:public"], | ||||
| ) | ||||
| @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| package pod | ||||
| package resource | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| @@ -34,9 +34,9 @@ import ( | ||||
| 	extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions" | ||||
| ) | ||||
| 
 | ||||
| // TODO: This function is generic enough and used enough that it should be | ||||
| // moved to its own subpkg. | ||||
| func getRuntimeObjectForKind(c clientset.Interface, kind schema.GroupKind, ns, name string) (runtime.Object, error) { | ||||
| // GetRuntimeObjectForKind returns a runtime.Object based on its GroupKind, | ||||
| // namespace and name. | ||||
| func GetRuntimeObjectForKind(c clientset.Interface, kind schema.GroupKind, ns, name string) (runtime.Object, error) { | ||||
| 	switch kind { | ||||
| 	case api.Kind("ReplicationController"): | ||||
| 		return c.CoreV1().ReplicationControllers(ns).Get(name, metav1.GetOptions{}) | ||||
| @@ -53,9 +53,8 @@ func getRuntimeObjectForKind(c clientset.Interface, kind schema.GroupKind, ns, n | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // TODO: This function is generic enough and used enough that it should be | ||||
| // moved to its own subpkg. | ||||
| func getSelectorFromRuntimeObject(obj runtime.Object) (labels.Selector, error) { | ||||
| // GetSelectorFromRuntimeObject returns the labels for the given object. | ||||
| func GetSelectorFromRuntimeObject(obj runtime.Object) (labels.Selector, error) { | ||||
| 	switch typed := obj.(type) { | ||||
| 	case *v1.ReplicationController: | ||||
| 		return labels.SelectorFromSet(typed.Spec.Selector), nil | ||||
| @@ -78,9 +77,9 @@ func getSelectorFromRuntimeObject(obj runtime.Object) (labels.Selector, error) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // TODO: This function is generic enough and used enough that it should be | ||||
| // moved to its own subpkg. | ||||
| func getReplicasFromRuntimeObject(obj runtime.Object) (int32, error) { | ||||
| // GetReplicasFromRuntimeObject returns the number of replicas for the given | ||||
| // object. | ||||
| func GetReplicasFromRuntimeObject(obj runtime.Object) (int32, error) { | ||||
| 	switch typed := obj.(type) { | ||||
| 	case *v1.ReplicationController: | ||||
| 		if typed.Spec.Replicas != nil { | ||||
| @@ -48,9 +48,7 @@ import ( | ||||
| 	gomegatypes "github.com/onsi/gomega/types" | ||||
|  | ||||
| 	appsv1 "k8s.io/api/apps/v1" | ||||
| 	batchv1 "k8s.io/api/batch/v1" | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	extensionsv1beta1 "k8s.io/api/extensions/v1beta1" | ||||
| 	apierrs "k8s.io/apimachinery/pkg/api/errors" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"k8s.io/apimachinery/pkg/fields" | ||||
| @@ -74,10 +72,6 @@ import ( | ||||
| 	clientcmdapi "k8s.io/client-go/tools/clientcmd/api" | ||||
| 	watchtools "k8s.io/client-go/tools/watch" | ||||
| 	podutil "k8s.io/kubernetes/pkg/api/v1/pod" | ||||
| 	appsinternal "k8s.io/kubernetes/pkg/apis/apps" | ||||
| 	batchinternal "k8s.io/kubernetes/pkg/apis/batch" | ||||
| 	api "k8s.io/kubernetes/pkg/apis/core" | ||||
| 	extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions" | ||||
| 	"k8s.io/kubernetes/pkg/client/conditions" | ||||
| 	"k8s.io/kubernetes/pkg/controller" | ||||
| 	"k8s.io/kubernetes/pkg/controller/service" | ||||
| @@ -91,6 +85,7 @@ import ( | ||||
| 	e2elog "k8s.io/kubernetes/test/e2e/framework/log" | ||||
| 	e2enode "k8s.io/kubernetes/test/e2e/framework/node" | ||||
| 	e2epod "k8s.io/kubernetes/test/e2e/framework/pod" | ||||
| 	e2eresource "k8s.io/kubernetes/test/e2e/framework/resource" | ||||
| 	e2essh "k8s.io/kubernetes/test/e2e/framework/ssh" | ||||
| 	testutils "k8s.io/kubernetes/test/utils" | ||||
| 	imageutils "k8s.io/kubernetes/test/utils/image" | ||||
| @@ -2226,94 +2221,11 @@ func ScaleResource( | ||||
| 	return e2epod.WaitForControlledPodsRunning(clientset, ns, name, kind) | ||||
| } | ||||
|  | ||||
| func getRuntimeObjectForKind(c clientset.Interface, kind schema.GroupKind, ns, name string) (runtime.Object, error) { | ||||
| 	switch kind { | ||||
| 	case api.Kind("ReplicationController"): | ||||
| 		return c.CoreV1().ReplicationControllers(ns).Get(name, metav1.GetOptions{}) | ||||
| 	case extensionsinternal.Kind("ReplicaSet"), appsinternal.Kind("ReplicaSet"): | ||||
| 		return c.AppsV1().ReplicaSets(ns).Get(name, metav1.GetOptions{}) | ||||
| 	case extensionsinternal.Kind("Deployment"), appsinternal.Kind("Deployment"): | ||||
| 		return c.AppsV1().Deployments(ns).Get(name, metav1.GetOptions{}) | ||||
| 	case extensionsinternal.Kind("DaemonSet"): | ||||
| 		return c.AppsV1().DaemonSets(ns).Get(name, metav1.GetOptions{}) | ||||
| 	case batchinternal.Kind("Job"): | ||||
| 		return c.BatchV1().Jobs(ns).Get(name, metav1.GetOptions{}) | ||||
| 	default: | ||||
| 		return nil, fmt.Errorf("Unsupported kind when getting runtime object: %v", kind) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func getSelectorFromRuntimeObject(obj runtime.Object) (labels.Selector, error) { | ||||
| 	switch typed := obj.(type) { | ||||
| 	case *v1.ReplicationController: | ||||
| 		return labels.SelectorFromSet(typed.Spec.Selector), nil | ||||
| 	case *extensionsv1beta1.ReplicaSet: | ||||
| 		return metav1.LabelSelectorAsSelector(typed.Spec.Selector) | ||||
| 	case *appsv1.ReplicaSet: | ||||
| 		return metav1.LabelSelectorAsSelector(typed.Spec.Selector) | ||||
| 	case *extensionsv1beta1.Deployment: | ||||
| 		return metav1.LabelSelectorAsSelector(typed.Spec.Selector) | ||||
| 	case *appsv1.Deployment: | ||||
| 		return metav1.LabelSelectorAsSelector(typed.Spec.Selector) | ||||
| 	case *extensionsv1beta1.DaemonSet: | ||||
| 		return metav1.LabelSelectorAsSelector(typed.Spec.Selector) | ||||
| 	case *appsv1.DaemonSet: | ||||
| 		return metav1.LabelSelectorAsSelector(typed.Spec.Selector) | ||||
| 	case *batchv1.Job: | ||||
| 		return metav1.LabelSelectorAsSelector(typed.Spec.Selector) | ||||
| 	default: | ||||
| 		return nil, fmt.Errorf("Unsupported kind when getting selector: %v", obj) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func getReplicasFromRuntimeObject(obj runtime.Object) (int32, error) { | ||||
| 	switch typed := obj.(type) { | ||||
| 	case *v1.ReplicationController: | ||||
| 		if typed.Spec.Replicas != nil { | ||||
| 			return *typed.Spec.Replicas, nil | ||||
| 		} | ||||
| 		return 0, nil | ||||
| 	case *extensionsv1beta1.ReplicaSet: | ||||
| 		if typed.Spec.Replicas != nil { | ||||
| 			return *typed.Spec.Replicas, nil | ||||
| 		} | ||||
| 		return 0, nil | ||||
| 	case *appsv1.ReplicaSet: | ||||
| 		if typed.Spec.Replicas != nil { | ||||
| 			return *typed.Spec.Replicas, nil | ||||
| 		} | ||||
| 		return 0, nil | ||||
| 	case *extensionsv1beta1.Deployment: | ||||
| 		if typed.Spec.Replicas != nil { | ||||
| 			return *typed.Spec.Replicas, nil | ||||
| 		} | ||||
| 		return 0, nil | ||||
| 	case *appsv1.Deployment: | ||||
| 		if typed.Spec.Replicas != nil { | ||||
| 			return *typed.Spec.Replicas, nil | ||||
| 		} | ||||
| 		return 0, nil | ||||
| 	case *extensionsv1beta1.DaemonSet: | ||||
| 		return 0, nil | ||||
| 	case *appsv1.DaemonSet: | ||||
| 		return 0, nil | ||||
| 	case *batchv1.Job: | ||||
| 		// TODO: currently we use pause pods so that's OK. When we'll want to switch to Pods | ||||
| 		// that actually finish we need a better way to do this. | ||||
| 		if typed.Spec.Parallelism != nil { | ||||
| 			return *typed.Spec.Parallelism, nil | ||||
| 		} | ||||
| 		return 0, nil | ||||
| 	default: | ||||
| 		return -1, fmt.Errorf("Unsupported kind when getting number of replicas: %v", obj) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // DeleteResourceAndWaitForGC deletes only given resource and waits for GC to delete the pods. | ||||
| func DeleteResourceAndWaitForGC(c clientset.Interface, kind schema.GroupKind, ns, name string) error { | ||||
| 	ginkgo.By(fmt.Sprintf("deleting %v %s in namespace %s, will wait for the garbage collector to delete the pods", kind, name, ns)) | ||||
|  | ||||
| 	rtObject, err := getRuntimeObjectForKind(c, kind, ns, name) | ||||
| 	rtObject, err := e2eresource.GetRuntimeObjectForKind(c, kind, ns, name) | ||||
| 	if err != nil { | ||||
| 		if apierrs.IsNotFound(err) { | ||||
| 			e2elog.Logf("%v %s not found: %v", kind, name, err) | ||||
| @@ -2321,11 +2233,11 @@ func DeleteResourceAndWaitForGC(c clientset.Interface, kind schema.GroupKind, ns | ||||
| 		} | ||||
| 		return err | ||||
| 	} | ||||
| 	selector, err := getSelectorFromRuntimeObject(rtObject) | ||||
| 	selector, err := e2eresource.GetSelectorFromRuntimeObject(rtObject) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	replicas, err := getReplicasFromRuntimeObject(rtObject) | ||||
| 	replicas, err := e2eresource.GetReplicasFromRuntimeObject(rtObject) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user