#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 | ||||
| 
 | ||||
| 	@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) | ||||
| 
 | ||||
| .PHONY: vet | ||||
|  |  | |||
|  | @ -164,6 +164,14 @@ func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err err | |||
| 		if err != nil { | ||||
| 			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 { | ||||
| 		err := s.Client.Delete(context.TODO(), &appsv1.Deployment{ | ||||
| 			ObjectMeta: metav1.ObjectMeta{ | ||||
|  | @ -190,7 +198,7 @@ func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err err | |||
| 	} | ||||
| 
 | ||||
| 	seedJobIDs := s.getAllSeedJobIDs(*jenkins) | ||||
| 	if done && !reflect.DeepEqual(seedJobIDs, jenkins.Status.CreatedSeedJobs) { | ||||
| 	if !reflect.DeepEqual(seedJobIDs, jenkins.Status.CreatedSeedJobs) { | ||||
| 		jenkins.Status.CreatedSeedJobs = seedJobIDs | ||||
| 		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 | ||||
| } | ||||
| 
 | ||||
| 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
 | ||||
| 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) | ||||
|  |  | |||
|  | @ -92,6 +92,7 @@ func TestEnsureSeedJobs(t *testing.T) { | |||
| 			Client:        fakeClient, | ||||
| 			ClientSet:     kubernetes.Clientset{}, | ||||
| 			Notifications: nil, | ||||
| 			Jenkins:       jenkins, | ||||
| 		} | ||||
| 
 | ||||
| 		seedJobCreatingScript, err := seedJobCreatingGroovyScript(jenkins.Spec.SeedJobs[0]) | ||||
|  | @ -135,6 +136,7 @@ func TestEnsureSeedJobs(t *testing.T) { | |||
| 			Client:        fakeClient, | ||||
| 			ClientSet:     kubernetes.Clientset{}, | ||||
| 			Notifications: nil, | ||||
| 			Jenkins:       jenkins, | ||||
| 		} | ||||
| 
 | ||||
| 		jenkinsClient.EXPECT().GetNode(AgentName).AnyTimes() | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ import ( | |||
| func TestConfiguration(t *testing.T) { | ||||
| 	t.Parallel() | ||||
| 	namespace, ctx := setupTest(t) | ||||
| 	// Deletes test namespace
 | ||||
| 
 | ||||
| 	defer ctx.Cleanup() | ||||
| 
 | ||||
| 	jenkinsCRName := "e2e" | ||||
|  | @ -192,12 +192,12 @@ func createDefaultLimitsForContainersInNamespace(t *testing.T, namespace string) | |||
| 				{ | ||||
| 					Type: corev1.LimitTypeContainer, | ||||
| 					DefaultRequest: map[corev1.ResourceName]resource.Quantity{ | ||||
| 						corev1.ResourceCPU:    resource.MustParse("1"), | ||||
| 						corev1.ResourceMemory: resource.MustParse("1Gi"), | ||||
| 						corev1.ResourceCPU:    resource.MustParse("128m"), | ||||
| 						corev1.ResourceMemory: resource.MustParse("256Mi"), | ||||
| 					}, | ||||
| 					Default: map[corev1.ResourceName]resource.Quantity{ | ||||
| 						corev1.ResourceCPU:    resource.MustParse("4"), | ||||
| 						corev1.ResourceMemory: resource.MustParse("4Gi"), | ||||
| 						corev1.ResourceCPU:    resource.MustParse("256m"), | ||||
| 						corev1.ResourceMemory: resource.MustParse("512Mi"), | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue