mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-30 17:58:14 +00:00 
			
		
		
		
	Merge pull request #40919 from shashidharatd/fed-e2e-1
Automatic merge from submit-queue (batch tested with PRs 40175, 41107, 41111, 40893, 40919) [Federation][e2e] Move Cluster Registration to federation-up.sh **What this PR does / why we need it**: Remove cluster register/unregister calls from test case BeforeEach/AfterEach blocks. Register clusters once in federation-up.sh **Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #40768 **Special notes for your reviewer**: **Release note**: `NONE` cc: @madhusudancs @kubernetes/sig-federation-pr-reviews
This commit is contained in:
		| @@ -85,23 +85,26 @@ function init() { | ||||
|       --image="${kube_registry}/hyperkube-amd64:${kube_version}" | ||||
| } | ||||
|  | ||||
| # create_cluster_secrets creates the secrets containing the kubeconfigs | ||||
| # of the participating clusters in the host cluster. The kubeconfigs itself | ||||
| # are created while deploying clusters, i.e. when kube-up is run. | ||||
| function create_cluster_secrets() { | ||||
|   local -r kubeconfig_dir="$(dirname ${DEFAULT_KUBECONFIG})" | ||||
|   local -r base_dir="${kubeconfig_dir}/federation/kubernetes-apiserver" | ||||
| # join_cluster_to_federation joins the clusters in the local kubeconfig to federation. The clusters | ||||
| # and their kubeconfig entries in the local kubeconfig are created while deploying clusters, i.e. when kube-up is run. | ||||
| function join_cluster_to_federation() { | ||||
|   for cluster in $("${KUBE_ROOT}/cluster/kubectl.sh" config get-clusters |sed -n '1!p'); do | ||||
|     # Skip federation context | ||||
|     if [[ "${cluster}" == "${FEDERATION_NAME}" ]]; then | ||||
|       continue | ||||
|     fi | ||||
|     # Skip contexts not beginning with "federation" | ||||
|     if [[ "${cluster}" != federation* ]]; then | ||||
|       continue | ||||
|     fi | ||||
|  | ||||
|   # Create secrets with all the kubernetes-apiserver's kubeconfigs. | ||||
|   for dir in $(ls "${base_dir}"); do | ||||
|     # We create a secret with the same name as the directory name (which is | ||||
|     # same as cluster name in kubeconfig). | ||||
|     # Massage the name so that it is valid (should not contain "_" and max 253 | ||||
|     # chars) | ||||
|     name=$(echo "${dir}" | sed -e "s/_/-/g")  # Replace "_" by "-" | ||||
|     name=${name:0:252} | ||||
|     kube::log::status "Creating secret with name: ${name} in namespace ${FEDERATION_NAMESPACE}" | ||||
|     "${KUBE_ROOT}/cluster/kubectl.sh" create secret generic ${name} --from-file="${base_dir}/${dir}/kubeconfig" --namespace="${FEDERATION_NAMESPACE}" | ||||
|   kube::log::status "Joining cluster with name '${cluster}' to federation with name '${FEDERATION_NAME}'" | ||||
|  | ||||
|   "${KUBE_ROOT}/federation/develop/kubefed.sh" join \ | ||||
|       "${cluster}" \ | ||||
|       --host-cluster-context="${HOST_CLUSTER_CONTEXT}" \ | ||||
|       --context="${FEDERATION_NAME}" \ | ||||
|       --secret-name="${cluster//_/-}"    # Replace "_" by "-" | ||||
|   done | ||||
| } | ||||
|  | ||||
| @@ -109,11 +112,8 @@ USE_KUBEFED="${USE_KUBEFED:-}" | ||||
|  | ||||
| if [[ "${USE_KUBEFED}" == "true" ]]; then | ||||
|   init | ||||
|   # TODO(madhusudancs): Call to create_cluster_secrets and the function | ||||
|   # itself must be removed after implementing cluster join with kubefed | ||||
|   # here. This call is now required for the cluster joins in the | ||||
|   # BeforeEach blocks of each e2e test to work. | ||||
|   create_cluster_secrets | ||||
|  | ||||
|   join_cluster_to_federation | ||||
| else | ||||
|   export FEDERATION_IMAGE_TAG="$(get_version)" | ||||
|   create-federation-api-objects | ||||
|   | ||||
| @@ -51,8 +51,7 @@ var _ = framework.KubeDescribe("Federation daemonsets [Feature:Federation]", fun | ||||
|  | ||||
| 		BeforeEach(func() { | ||||
| 			fedframework.SkipUnlessFederated(f.ClientSet) | ||||
| 			clusters = map[string]*cluster{} | ||||
| 			registerClusters(clusters, UserAgentName, "", f) | ||||
| 			clusters, _ = getRegisteredClusters(UserAgentName, f) | ||||
| 		}) | ||||
|  | ||||
| 		AfterEach(func() { | ||||
| @@ -60,7 +59,6 @@ var _ = framework.KubeDescribe("Federation daemonsets [Feature:Federation]", fun | ||||
| 			// Delete all daemonsets. | ||||
| 			nsName := f.FederationNamespace.Name | ||||
| 			deleteAllDaemonSetsOrFail(f.FederationClientset, nsName) | ||||
| 			unregisterClusters(clusters, f) | ||||
| 		}) | ||||
|  | ||||
| 		It("should be created and deleted successfully", func() { | ||||
|   | ||||
| @@ -18,7 +18,6 @@ package e2e_federation | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| @@ -71,22 +70,16 @@ var _ = framework.KubeDescribe("Federation deployments [Feature:Federation]", fu | ||||
| 	// e2e cases for federated deployment controller | ||||
| 	Describe("Federated Deployment", func() { | ||||
| 		var ( | ||||
| 			clusters       map[string]*cluster | ||||
| 			federationName string | ||||
| 			clusters map[string]*cluster | ||||
| 		) | ||||
| 		BeforeEach(func() { | ||||
| 			fedframework.SkipUnlessFederated(f.ClientSet) | ||||
| 			if federationName = os.Getenv("FEDERATION_NAME"); federationName == "" { | ||||
| 				federationName = DefaultFederationName | ||||
| 			} | ||||
| 			clusters = map[string]*cluster{} | ||||
| 			registerClusters(clusters, UserAgentName, federationName, f) | ||||
| 			clusters, _ = getRegisteredClusters(UserAgentName, f) | ||||
| 		}) | ||||
|  | ||||
| 		AfterEach(func() { | ||||
| 			nsName := f.FederationNamespace.Name | ||||
| 			deleteAllDeploymentsOrFail(f.FederationClientset, nsName) | ||||
| 			unregisterClusters(clusters, f) | ||||
| 		}) | ||||
|  | ||||
| 		It("should create and update matching deployments in underlying clusters", func() { | ||||
|   | ||||
| @@ -94,8 +94,7 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func( | ||||
| 				federationName = DefaultFederationName | ||||
| 			} | ||||
| 			jig = newFederationTestJig(f.FederationClientset) | ||||
| 			clusters = map[string]*cluster{} | ||||
| 			primaryClusterName = registerClusters(clusters, UserAgentName, federationName, f) | ||||
| 			clusters, primaryClusterName = getRegisteredClusters(UserAgentName, f) | ||||
| 			ns = f.FederationNamespace.Name | ||||
| 		}) | ||||
|  | ||||
| @@ -103,7 +102,6 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func( | ||||
| 			// Delete all ingresses. | ||||
| 			nsName := f.FederationNamespace.Name | ||||
| 			deleteAllIngressesOrFail(f.FederationClientset, nsName) | ||||
| 			unregisterClusters(clusters, f) | ||||
| 		}) | ||||
|  | ||||
| 		It("should create and update matching ingresses in underlying clusters", func() { | ||||
|   | ||||
| @@ -18,7 +18,6 @@ package e2e_federation | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| @@ -44,19 +43,11 @@ var _ = framework.KubeDescribe("Federation namespace [Feature:Federation]", func | ||||
| 	f := fedframework.NewDefaultFederatedFramework("federation-namespace") | ||||
|  | ||||
| 	Describe("Namespace objects", func() { | ||||
| 		var federationName string | ||||
| 		var clusters map[string]*cluster // All clusters, keyed by cluster name | ||||
|  | ||||
| 		BeforeEach(func() { | ||||
| 			fedframework.SkipUnlessFederated(f.ClientSet) | ||||
|  | ||||
| 			// TODO: Federation API server should be able to answer this. | ||||
| 			if federationName = os.Getenv("FEDERATION_NAME"); federationName == "" { | ||||
| 				federationName = DefaultFederationName | ||||
| 			} | ||||
|  | ||||
| 			clusters = map[string]*cluster{} | ||||
| 			registerClusters(clusters, UserAgentName, federationName, f) | ||||
| 			clusters, _ = getRegisteredClusters(UserAgentName, f) | ||||
| 		}) | ||||
|  | ||||
| 		AfterEach(func() { | ||||
| @@ -69,7 +60,6 @@ var _ = framework.KubeDescribe("Federation namespace [Feature:Federation]", func | ||||
| 					cluster.Core().Namespaces().List, | ||||
| 					cluster.Core().Namespaces().Delete) | ||||
| 			} | ||||
| 			unregisterClusters(clusters, f) | ||||
| 		}) | ||||
|  | ||||
| 		It("should be created and deleted successfully", func() { | ||||
|   | ||||
| @@ -18,7 +18,6 @@ package e2e_federation | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| @@ -73,23 +72,17 @@ var _ = framework.KubeDescribe("Federation replicasets [Feature:Federation]", fu | ||||
| 	// e2e cases for federated replicaset controller | ||||
| 	Describe("Federated ReplicaSet", func() { | ||||
| 		var ( | ||||
| 			clusters       map[string]*cluster | ||||
| 			federationName string | ||||
| 			clusters map[string]*cluster | ||||
| 		) | ||||
| 		BeforeEach(func() { | ||||
| 			fedframework.SkipUnlessFederated(f.ClientSet) | ||||
| 			if federationName = os.Getenv("FEDERATION_NAME"); federationName == "" { | ||||
| 				federationName = DefaultFederationName | ||||
| 			} | ||||
| 			clusters = map[string]*cluster{} | ||||
| 			registerClusters(clusters, UserAgentName, federationName, f) | ||||
| 			clusters, _ = getRegisteredClusters(UserAgentName, f) | ||||
| 		}) | ||||
|  | ||||
| 		AfterEach(func() { | ||||
| 			// Delete all replicasets. | ||||
| 			nsName := f.FederationNamespace.Name | ||||
| 			deleteAllReplicaSetsOrFail(f.FederationClientset, nsName) | ||||
| 			unregisterClusters(clusters, f) | ||||
| 		}) | ||||
|  | ||||
| 		It("should create and update matching replicasets in underling clusters", func() { | ||||
|   | ||||
| @@ -50,8 +50,7 @@ var _ = framework.KubeDescribe("Federation secrets [Feature:Federation]", func() | ||||
|  | ||||
| 		BeforeEach(func() { | ||||
| 			fedframework.SkipUnlessFederated(f.ClientSet) | ||||
| 			clusters = map[string]*cluster{} | ||||
| 			registerClusters(clusters, UserAgentName, "", f) | ||||
| 			clusters, _ = getRegisteredClusters(UserAgentName, f) | ||||
| 		}) | ||||
|  | ||||
| 		AfterEach(func() { | ||||
| @@ -59,8 +58,6 @@ var _ = framework.KubeDescribe("Federation secrets [Feature:Federation]", func() | ||||
| 			// Delete all secrets. | ||||
| 			nsName := f.FederationNamespace.Name | ||||
| 			deleteAllSecretsOrFail(f.FederationClientset, nsName) | ||||
| 			unregisterClusters(clusters, f) | ||||
|  | ||||
| 		}) | ||||
|  | ||||
| 		It("should be created and deleted successfully", func() { | ||||
|   | ||||
| @@ -89,12 +89,7 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func() | ||||
| 				federationName = DefaultFederationName | ||||
| 			} | ||||
|  | ||||
| 			clusters = map[string]*cluster{} | ||||
| 			primaryClusterName = registerClusters(clusters, UserAgentName, federationName, f) | ||||
| 		}) | ||||
|  | ||||
| 		AfterEach(func() { | ||||
| 			unregisterClusters(clusters, f) | ||||
| 			clusters, primaryClusterName = getRegisteredClusters(UserAgentName, f) | ||||
| 		}) | ||||
|  | ||||
| 		Describe("service creation", func() { | ||||
|   | ||||
| @@ -100,9 +100,9 @@ func clusterIsReadyOrFail(f *fedframework.Framework, context *fedframework.E2ECo | ||||
| 	framework.Logf("Cluster %s is Ready", context.Name) | ||||
| } | ||||
|  | ||||
| // waitForAllClustersReady wait for all clusters defined in e2e context to be created | ||||
| // waitForAllRegisteredClusters waits for all clusters defined in e2e context to be created | ||||
| // return ClusterList until the listed cluster items equals clusterCount | ||||
| func waitForAllClustersReady(f *fedframework.Framework, clusterCount int) *federationapi.ClusterList { | ||||
| func waitForAllRegisteredClusters(f *fedframework.Framework, clusterCount int) *federationapi.ClusterList { | ||||
| 	var clusterList *federationapi.ClusterList | ||||
| 	if err := wait.PollImmediate(framework.Poll, FederatedServiceTimeout, func() (bool, error) { | ||||
| 		var err error | ||||
| @@ -187,15 +187,12 @@ func unregisterClusters(clusters map[string]*cluster, f *fedframework.Framework) | ||||
| } | ||||
|  | ||||
| // can not be moved to util, as By and Expect must be put in Ginkgo test unit | ||||
| func registerClusters(clusters map[string]*cluster, userAgentName, federationName string, f *fedframework.Framework) string { | ||||
| func getRegisteredClusters(userAgentName string, f *fedframework.Framework) (map[string]*cluster, string) { | ||||
| 	clusters := make(map[string]*cluster) | ||||
| 	contexts := f.GetUnderlyingFederatedContexts() | ||||
|  | ||||
| 	for _, context := range contexts { | ||||
| 		createClusterObjectOrFail(f, &context) | ||||
| 	} | ||||
|  | ||||
| 	By("Obtaining a list of all the clusters") | ||||
| 	clusterList := waitForAllClustersReady(f, len(contexts)) | ||||
| 	clusterList := waitForAllRegisteredClusters(f, len(contexts)) | ||||
|  | ||||
| 	framework.Logf("Checking that %d clusters are Ready", len(contexts)) | ||||
| 	for _, context := range contexts { | ||||
| @@ -211,7 +208,7 @@ func registerClusters(clusters map[string]*cluster, userAgentName, federationNam | ||||
| 		clusters[c.Name] = &cluster{c.Name, createClientsetForCluster(c, i, userAgentName), false, nil} | ||||
| 	} | ||||
| 	createNamespaceInClusters(clusters, f) | ||||
| 	return primaryClusterName | ||||
| 	return clusters, primaryClusterName | ||||
| } | ||||
|  | ||||
| /* | ||||
|   | ||||
| @@ -140,9 +140,6 @@ func (f *Framework) FederationAfterEach() { | ||||
| 			framework.Logf("Warning: framework is marked federated, but has no federation 1.5 clientset") | ||||
| 			return | ||||
| 		} | ||||
| 		if err := f.FederationClientset.Federation().Clusters().DeleteCollection(nil, metav1.ListOptions{}); err != nil { | ||||
| 			framework.Logf("Error: failed to delete Clusters: %+v", err) | ||||
| 		} | ||||
| 	}() | ||||
|  | ||||
| 	// Print events if the test failed. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Submit Queue
					Kubernetes Submit Queue