From 393c3d690cc8261411730b4d9d7d55780118af9b Mon Sep 17 00:00:00 2001 From: Jakub Al-Khalili Date: Tue, 27 Aug 2019 10:58:14 +0200 Subject: [PATCH] Small improvements --- pkg/controller/jenkins/client/jenkins.go | 5 +++-- pkg/controller/jenkins/client/mockgen.go | 14 ++++++++++++++ .../configuration/user/seedjobs/seedjobs.go | 14 ++++++++------ .../user/seedjobs/seedjobs_test.go | 19 +++++++++++++++++++ 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/pkg/controller/jenkins/client/jenkins.go b/pkg/controller/jenkins/client/jenkins.go index 5d6f6f35..ab9b1fa9 100644 --- a/pkg/controller/jenkins/client/jenkins.go +++ b/pkg/controller/jenkins/client/jenkins.go @@ -57,6 +57,7 @@ type Jenkins interface { Poll() (int, error) ExecuteScript(groovyScript string) (logs string, err error) GetNodeSecret(name string) (string, error) + IsNotFoundError(err error) bool } type jenkins struct { @@ -67,7 +68,7 @@ type jenkins struct { func (jenkins *jenkins) CreateOrUpdateJob(config, jobName string) (job *gojenkins.Job, created bool, err error) { // create or update job, err = jenkins.GetJob(jobName) - if isNotFoundError(err) { + if jenkins.IsNotFoundError(err) { job, err = jenkins.CreateJob(config, jobName) created = true return job, true, errors.WithStack(err) @@ -135,7 +136,7 @@ func New(url, user, passwordOrToken string) (Jenkins, error) { return jenkinsClient, nil } -func isNotFoundError(err error) bool { +func (jenkins *jenkins) IsNotFoundError(err error) bool { if err != nil { return err.Error() == errorNotFound.Error() } diff --git a/pkg/controller/jenkins/client/mockgen.go b/pkg/controller/jenkins/client/mockgen.go index 404584df..8ad470d9 100644 --- a/pkg/controller/jenkins/client/mockgen.go +++ b/pkg/controller/jenkins/client/mockgen.go @@ -138,6 +138,20 @@ func (m *MockJenkins) CreateFolder(name string, parents ...string) (*gojenkins.F return ret0, ret1 } +// IsNotFoundError mocks base method +func (m *MockJenkins) IsNotFoundError(err error) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IsNotFoundError", err) + ret0, _ := ret[0].(bool) + return ret0 +} + +// IsNotFoundError indicates an expected call of IsNotFoundError +func (mr *MockJenkinsMockRecorder) IsNotFoundError(err error) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsNotFoundError", reflect.TypeOf((*MockJenkins)(nil).IsNotFoundError), err) +} + // CreateFolder indicates an expected call of CreateFolder func (mr *MockJenkinsMockRecorder) CreateFolder(name interface{}, parents ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go index ee0b6628..fce1a4db 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go @@ -227,11 +227,13 @@ func (s SeedJobs) createAgent(jenkinsClient jenkinsclient.Jenkins, k8sClient cli _, err := jenkinsClient.GetNode(agentName) // Create node if not exists - if err != nil { + if jenkinsClient.IsNotFoundError(err) { _, err = jenkinsClient.CreateNode(agentName, 1, "The jenkins-operator generated agent", "/home/jenkins", agentName) if err != nil { return err } + } else if err != nil { + return err } secret, err := jenkinsClient.GetNodeSecret(agentName) @@ -242,13 +244,13 @@ func (s SeedJobs) createAgent(jenkinsClient jenkinsclient.Jenkins, k8sClient cli deployment := agentDeployment(jenkinsManifest, namespace, agentName, secret) err = k8sClient.Create(context.TODO(), deployment) - if err != nil { + if apierrors.IsAlreadyExists(err) { err := k8sClient.Update(context.TODO(), deployment) - if err != nil && apierrors.IsAlreadyExists(err) { - return err - } else if err != nil { + if err != nil { return err } + } else if err != nil { + return err } return nil @@ -265,7 +267,7 @@ func agentDeployment(jenkinsManifest *v1alpha2.Jenkins, namespace string, agentN Spec: corev1.PodSpec{ Containers: []corev1.Container{ { - Name: fmt.Sprintf("%s-container", agentName), + Name: "jnlp", Image: "jenkins/jnlp-slave:alpine", Env: []corev1.EnvVar{ { diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go index 46f1cb9a..19a6a33c 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go @@ -48,6 +48,10 @@ func TestEnsureSeedJobs(t *testing.T) { }, } + jobID := jenkins.Spec.SeedJobs[0].ID + + jenkinsClient.EXPECT().IsNotFoundError(nil).AnyTimes() + jenkinsClient.EXPECT().GetJob(jobID).AnyTimes() jenkinsClient.EXPECT().GetNodeSecret(agentName).Return(secret, nil).AnyTimes() jenkinsClient.EXPECT().GetAllNodes().Return([]*gojenkins.Node{}, nil).AnyTimes() jenkinsClient.EXPECT().CreateNode(agentName, 1, "The jenkins-operator generated agent", "/home/jenkins", agentName).Return(testNode, nil).AnyTimes() @@ -59,6 +63,10 @@ func TestEnsureSeedJobs(t *testing.T) { _, err = seedJobClient.EnsureSeedJobs(jenkins) assert.NoError(t, err) + + _, err = jenkinsClient.GetJob(jobID) + + assert.False(t, jenkinsClient.IsNotFoundError(err)) }) t.Run("delete pod when no seed jobs", func(t *testing.T) { @@ -78,6 +86,7 @@ func TestEnsureSeedJobs(t *testing.T) { err := v1alpha2.SchemeBuilder.AddToScheme(scheme.Scheme) assert.NoError(t, err) + jenkinsClient.EXPECT().IsNotFoundError(nil).AnyTimes() jenkinsClient.EXPECT().GetNode(agentName).AnyTimes() jenkinsClient.EXPECT().GetNodeSecret(agentName).Return(secret, nil).AnyTimes() jenkinsClient.EXPECT().GetAllNodes().Return([]*gojenkins.Node{}, nil).AnyTimes() @@ -85,6 +94,15 @@ func TestEnsureSeedJobs(t *testing.T) { seedJobsClient := New(jenkinsClient, fakeClient, nil) + err = fakeClient.Create(ctx, &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("%s-deployment", agentName), + Namespace: namespace, + }, + }) + + assert.NoError(t, err) + // when _, err = seedJobsClient.EnsureSeedJobs(jenkinsCustomRes) assert.NoError(t, err) @@ -223,6 +241,7 @@ func TestCreateAgent(t *testing.T) { err := v1alpha2.SchemeBuilder.AddToScheme(scheme.Scheme) assert.NoError(t, err) + jenkinsClient.EXPECT().IsNotFoundError(nil).AnyTimes() jenkinsClient.EXPECT().GetNode(agentName).AnyTimes() jenkinsClient.EXPECT().GetNodeSecret(agentName).Return(secret, nil).AnyTimes() jenkinsClient.EXPECT().GetAllNodes().Return([]*gojenkins.Node{}, nil).AnyTimes()