#173 Add waiting mechanism for the seed job agent
This commit is contained in:
		
							parent
							
								
									667d263f7d
								
							
						
					
					
						commit
						7df8b32f95
					
				
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							|  | @ -186,7 +186,7 @@ ifeq ($(KUBECTL_CONTEXT),minikube) | ||||||
| endif | endif | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| 	@RUNNING_TESTS=1 go test -parallel=1 "./test/e2e/" -tags "$(BUILDTAGS) cgo" -v -timeout 30m -run "$(E2E_TEST_SELECTOR)" \
 | 	@RUNNING_TESTS=1 go test -parallel=1 "./test/e2e/" -tags "$(BUILDTAGS) cgo" -v -timeout 45m -run "$(E2E_TEST_SELECTOR)" \
 | ||||||
| 		-root=$(CURRENT_DIRECTORY) -kubeconfig=$(HOME)/.kube/config -globalMan deploy/crds/jenkins_$(API_VERSION)_jenkins_crd.yaml -namespacedMan deploy/namespace-init.yaml $(EXTRA_ARGS) | 		-root=$(CURRENT_DIRECTORY) -kubeconfig=$(HOME)/.kube/config -globalMan deploy/crds/jenkins_$(API_VERSION)_jenkins_crd.yaml -namespacedMan deploy/namespace-init.yaml $(EXTRA_ARGS) | ||||||
| 
 | 
 | ||||||
| .PHONY: vet | .PHONY: vet | ||||||
|  |  | ||||||
|  | @ -164,6 +164,14 @@ func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err err | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		requeue, err := s.waitForSeedJobAgent(AgentName) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return false, err | ||||||
|  | 		} | ||||||
|  | 		if requeue { | ||||||
|  | 			return false, nil | ||||||
|  | 		} | ||||||
| 	} else if len(jenkins.Spec.SeedJobs) == 0 { | 	} else if len(jenkins.Spec.SeedJobs) == 0 { | ||||||
| 		err := s.Client.Delete(context.TODO(), &appsv1.Deployment{ | 		err := s.Client.Delete(context.TODO(), &appsv1.Deployment{ | ||||||
| 			ObjectMeta: metav1.ObjectMeta{ | 			ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | @ -190,7 +198,7 @@ func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	seedJobIDs := s.getAllSeedJobIDs(*jenkins) | 	seedJobIDs := s.getAllSeedJobIDs(*jenkins) | ||||||
| 	if done && !reflect.DeepEqual(seedJobIDs, jenkins.Status.CreatedSeedJobs) { | 	if !reflect.DeepEqual(seedJobIDs, jenkins.Status.CreatedSeedJobs) { | ||||||
| 		jenkins.Status.CreatedSeedJobs = seedJobIDs | 		jenkins.Status.CreatedSeedJobs = seedJobIDs | ||||||
| 		return false, stackerr.WithStack(s.Client.Update(context.TODO(), jenkins)) | 		return false, stackerr.WithStack(s.Client.Update(context.TODO(), jenkins)) | ||||||
| 	} | 	} | ||||||
|  | @ -198,6 +206,24 @@ func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err err | ||||||
| 	return true, nil | 	return true, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (s SeedJobs) waitForSeedJobAgent(agentName string) (requeue bool, err error) { | ||||||
|  | 	agent := appsv1.Deployment{} | ||||||
|  | 	err = s.Client.Get(context.TODO(), types.NamespacedName{Name: agentDeploymentName(*s.Jenkins, agentName), Namespace: s.Jenkins.Namespace}, &agent) | ||||||
|  | 	if apierrors.IsNotFound(err) { | ||||||
|  | 		return true, nil | ||||||
|  | 	} else if err != nil { | ||||||
|  | 		return true, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	noReadyReplicas := agent.Status.ReadyReplicas == 0 | ||||||
|  | 	if noReadyReplicas { | ||||||
|  | 		s.logger.Info(fmt.Sprintf("Waiting for Seed Job Agent `%s`...", agentName)) | ||||||
|  | 		return true, nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return false, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // createJob is responsible for creating jenkins job which configures jenkins seed jobs and deploy keys
 | // createJob is responsible for creating jenkins job which configures jenkins seed jobs and deploy keys
 | ||||||
| func (s *SeedJobs) createJobs(jenkins *v1alpha2.Jenkins) (requeue bool, err error) { | func (s *SeedJobs) createJobs(jenkins *v1alpha2.Jenkins) (requeue bool, err error) { | ||||||
| 	groovyClient := groovy.New(s.jenkinsClient, s.Client, s.logger, jenkins, "seed-jobs", jenkins.Spec.GroovyScripts.Customization) | 	groovyClient := groovy.New(s.jenkinsClient, s.Client, s.logger, jenkins, "seed-jobs", jenkins.Spec.GroovyScripts.Customization) | ||||||
|  |  | ||||||
|  | @ -92,6 +92,7 @@ func TestEnsureSeedJobs(t *testing.T) { | ||||||
| 			Client:        fakeClient, | 			Client:        fakeClient, | ||||||
| 			ClientSet:     kubernetes.Clientset{}, | 			ClientSet:     kubernetes.Clientset{}, | ||||||
| 			Notifications: nil, | 			Notifications: nil, | ||||||
|  | 			Jenkins:       jenkins, | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		seedJobCreatingScript, err := seedJobCreatingGroovyScript(jenkins.Spec.SeedJobs[0]) | 		seedJobCreatingScript, err := seedJobCreatingGroovyScript(jenkins.Spec.SeedJobs[0]) | ||||||
|  | @ -135,6 +136,7 @@ func TestEnsureSeedJobs(t *testing.T) { | ||||||
| 			Client:        fakeClient, | 			Client:        fakeClient, | ||||||
| 			ClientSet:     kubernetes.Clientset{}, | 			ClientSet:     kubernetes.Clientset{}, | ||||||
| 			Notifications: nil, | 			Notifications: nil, | ||||||
|  | 			Jenkins:       jenkins, | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		jenkinsClient.EXPECT().GetNode(AgentName).AnyTimes() | 		jenkinsClient.EXPECT().GetNode(AgentName).AnyTimes() | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ import ( | ||||||
| func TestConfiguration(t *testing.T) { | func TestConfiguration(t *testing.T) { | ||||||
| 	t.Parallel() | 	t.Parallel() | ||||||
| 	namespace, ctx := setupTest(t) | 	namespace, ctx := setupTest(t) | ||||||
| 	// Deletes test namespace
 | 
 | ||||||
| 	defer ctx.Cleanup() | 	defer ctx.Cleanup() | ||||||
| 
 | 
 | ||||||
| 	jenkinsCRName := "e2e" | 	jenkinsCRName := "e2e" | ||||||
|  | @ -192,12 +192,12 @@ func createDefaultLimitsForContainersInNamespace(t *testing.T, namespace string) | ||||||
| 				{ | 				{ | ||||||
| 					Type: corev1.LimitTypeContainer, | 					Type: corev1.LimitTypeContainer, | ||||||
| 					DefaultRequest: map[corev1.ResourceName]resource.Quantity{ | 					DefaultRequest: map[corev1.ResourceName]resource.Quantity{ | ||||||
| 						corev1.ResourceCPU:    resource.MustParse("1"), | 						corev1.ResourceCPU:    resource.MustParse("128m"), | ||||||
| 						corev1.ResourceMemory: resource.MustParse("1Gi"), | 						corev1.ResourceMemory: resource.MustParse("256Mi"), | ||||||
| 					}, | 					}, | ||||||
| 					Default: map[corev1.ResourceName]resource.Quantity{ | 					Default: map[corev1.ResourceName]resource.Quantity{ | ||||||
| 						corev1.ResourceCPU:    resource.MustParse("4"), | 						corev1.ResourceCPU:    resource.MustParse("256m"), | ||||||
| 						corev1.ResourceMemory: resource.MustParse("4Gi"), | 						corev1.ResourceMemory: resource.MustParse("512Mi"), | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue