diff --git a/pkg/controller/jenkins/groovy/groovy.go b/pkg/controller/jenkins/groovy/groovy.go index 2d2826a4..ec9823ed 100644 --- a/pkg/controller/jenkins/groovy/groovy.go +++ b/pkg/controller/jenkins/groovy/groovy.go @@ -47,13 +47,6 @@ func (g *Groovy) EnsureSingle(source, name, hash, groovyScript string) (requeue return false, nil } - for i, ags := range g.jenkins.Status.AppliedGroovyScripts { - if ags.ConfigurationType == g.configurationType && ags.Name == name && ags.Source == source { - g.jenkins.Status.AppliedGroovyScripts = append(g.jenkins.Status.AppliedGroovyScripts[:i], - g.jenkins.Status.AppliedGroovyScripts[i+1:]...) - } - } - logs, err := g.jenkinsClient.ExecuteScript(groovyScript) if err != nil { if _, ok := err.(*jenkinsclient.GroovyScriptExecutionFailed); ok { @@ -62,12 +55,22 @@ func (g *Groovy) EnsureSingle(source, name, hash, groovyScript string) (requeue return true, err } - g.jenkins.Status.AppliedGroovyScripts = append(g.jenkins.Status.AppliedGroovyScripts, v1alpha2.AppliedGroovyScript{ + var appliedGroovyScripts []v1alpha2.AppliedGroovyScript + + for _, ags := range g.jenkins.Status.AppliedGroovyScripts { + if ags.ConfigurationType != g.configurationType && ags.Source != source && ags.Name != name { + appliedGroovyScripts = append(appliedGroovyScripts, ags) + } + } + appliedGroovyScripts = append(appliedGroovyScripts, v1alpha2.AppliedGroovyScript{ ConfigurationType: g.configurationType, Source: source, Name: name, Hash: hash, }) + + g.jenkins.Status.AppliedGroovyScripts = appliedGroovyScripts + return true, g.k8sClient.Update(context.TODO(), g.jenkins) } diff --git a/pkg/controller/jenkins/groovy/groovy_test.go b/pkg/controller/jenkins/groovy/groovy_test.go index 374cf7f3..5d3d8571 100644 --- a/pkg/controller/jenkins/groovy/groovy_test.go +++ b/pkg/controller/jenkins/groovy/groovy_test.go @@ -114,6 +114,7 @@ func TestGroovy_EnsureSingle(t *testing.T) { assert.Equal(t, groovyScriptName, jenkins.Status.AppliedGroovyScripts[0].Name) }) t.Run("execute script with new version", func(t *testing.T) { + anotherHash := "hash1" // given jenkins := &v1alpha2.Jenkins{ ObjectMeta: metav1.ObjectMeta{ @@ -137,11 +138,11 @@ func TestGroovy_EnsureSingle(t *testing.T) { groovyClient := New(jenkinsClient, fakeClient, log.Log, jenkins, configurationType, emptyCustomization) // when - _, err = groovyClient.EnsureSingle(source, groovyScriptName, hash, groovyScript) + requeue, err := groovyClient.EnsureSingle(source, groovyScriptName, hash, groovyScript) // then require.NoError(t, err) - + assert.True(t, requeue) err = fakeClient.Get(ctx, types.NamespacedName{Name: jenkins.Name, Namespace: jenkins.Namespace}, jenkins) require.NoError(t, err) assert.Equal(t, 1, len(jenkins.Status.AppliedGroovyScripts)) @@ -151,14 +152,15 @@ func TestGroovy_EnsureSingle(t *testing.T) { assert.Equal(t, groovyScriptName, jenkins.Status.AppliedGroovyScripts[0].Name) // Update with new hash - _, err = groovyClient.EnsureSingle(source, groovyScriptName, "hash1", groovyScript) + requeue, err = groovyClient.EnsureSingle(source, groovyScriptName, anotherHash, groovyScript) require.NoError(t, err) + assert.True(t, requeue) err = fakeClient.Get(ctx, types.NamespacedName{Name: jenkins.Name, Namespace: jenkins.Namespace}, jenkins) require.NoError(t, err) assert.Equal(t, 1, len(jenkins.Status.AppliedGroovyScripts)) assert.Equal(t, configurationType, jenkins.Status.AppliedGroovyScripts[0].ConfigurationType) - assert.Equal(t, "hash1", jenkins.Status.AppliedGroovyScripts[0].Hash) + assert.Equal(t, anotherHash, jenkins.Status.AppliedGroovyScripts[0].Hash) assert.Equal(t, source, jenkins.Status.AppliedGroovyScripts[0].Source) assert.Equal(t, groovyScriptName, jenkins.Status.AppliedGroovyScripts[0].Name) }) diff --git a/test/e2e/configuration_test.go b/test/e2e/configuration_test.go index 7e0af964..0beae099 100644 --- a/test/e2e/configuration_test.go +++ b/test/e2e/configuration_test.go @@ -6,18 +6,18 @@ import ( "testing" "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" - "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/groovy" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" + "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/groovy" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/bndr/gojenkins" - "k8s.io/apimachinery/pkg/api/resource" framework "github.com/operator-framework/operator-sdk/pkg/test" "github.com/stretchr/testify/assert" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestConfiguration(t *testing.T) {