From 7df8b32f951027d60f7dae68d8e6d1122af8bdac Mon Sep 17 00:00:00 2001 From: Jakub Al-Khalili Date: Tue, 17 Dec 2019 13:45:31 +0100 Subject: [PATCH] #173 Add waiting mechanism for seed job agent (#224) #173 Add waiting mechanism for the seed job agent --- Makefile | 2 +- .../configuration/user/seedjobs/seedjobs.go | 28 ++++++++++++++++++- .../user/seedjobs/seedjobs_test.go | 2 ++ test/e2e/configuration_test.go | 10 +++---- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index e5b5e763..11fcb8bd 100644 --- a/Makefile +++ b/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 diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go index 97159e61..0cc1d2ae 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go @@ -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) diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go index 22d47f6b..08cb6d32 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go @@ -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() diff --git a/test/e2e/configuration_test.go b/test/e2e/configuration_test.go index d98b612d..92cdb9f7 100644 --- a/test/e2e/configuration_test.go +++ b/test/e2e/configuration_test.go @@ -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"), }, }, },