#173 Add waiting mechanism for seed job agent (#224)

#173 Add waiting mechanism for the seed job agent
This commit is contained in:
Jakub Al-Khalili 2019-12-17 13:45:31 +01:00 committed by Tomasz Sęk
parent 667d263f7d
commit 7df8b32f95
4 changed files with 35 additions and 7 deletions

View File

@ -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

View File

@ -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)

View File

@ -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()

View File

@ -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"),
},
},
},