diff --git a/api/v1alpha2/jenkins_types.go b/api/v1alpha2/jenkins_types.go index dcd7554f..e3626b3b 100644 --- a/api/v1alpha2/jenkins_types.go +++ b/api/v1alpha2/jenkins_types.go @@ -73,6 +73,21 @@ type JenkinsSpec struct { // JenkinsAPISettings defines configuration used by the operator to gain admin access to the Jenkins API JenkinsAPISettings JenkinsAPISettings `json:"jenkinsAPISettings"` + + // +optional + Lifecycle JenkinsLifecycle `json:"lifecycle,omitempty"` +} + +type JenkinsLifecycle struct { + // +optional + Ignore JenkinsLifecycleIgnore `json:"ignore,omitempty"` +} + +type JenkinsLifecycleIgnore struct { + IgnoredVolumes []string `json:"volumes,omitempty"` + IgnoredEnvs []string `json:"envs,omitempty"` + IgnoredAnnotations []string `json:"annotations,omitempty"` + IgnoredLabels []string `json:"labels,omitempty"` } // AuthorizationStrategy defines authorization strategy of the operator for the Jenkins API @@ -404,6 +419,18 @@ type JenkinsMaster struct { // IgnoredVolumes defines the list of volume names that should be excluded from processing or consideration. // +optional IgnoredVolumes []string `json:"ignoredVolumes,omitempty"` + + // IgnoredAnnotations specifies a list of annotation keys that should be ignored during configuration updates. + // +optional + IgnoredAnnotations []string `json:"ignoredAnnotations,omitempty"` + + // IgnoredEnvVars defines the list of environment variable names that should be excluded from the Jenkins master pod. + // +optional + IgnoredEnvVars []string `json:"ignoredEnvVars,omitempty"` + + // IgnoredLabels specifies the list of labels to be excluded from configuration or processing in the Jenkins master. + // +optional + IgnoredLabels []string `json:"ignoredLabels,omitempty"` } // Service defines Kubernetes service attributes diff --git a/pkg/configuration/base/reconcile_test.go b/pkg/configuration/base/reconcile_test.go index fcbf3b59..daac66da 100644 --- a/pkg/configuration/base/reconcile_test.go +++ b/pkg/configuration/base/reconcile_test.go @@ -182,9 +182,12 @@ func TestCompareVolumes(t *testing.T) { t.Run("additional workspace identity volume but ignored", func(t *testing.T) { jenkins := &v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ - Master: v1alpha2.JenkinsMaster{ - IgnoredVolumes: []string{"azure-identity-token"}, + Lifecycle: v1alpha2.JenkinsLifecycle{ + Ignore: v1alpha2.JenkinsLifecycleIgnore{ + IgnoredVolumes: []string{"azure-identity-token"}, + }, }, }, } @@ -201,6 +204,30 @@ func TestCompareVolumes(t *testing.T) { assert.True(t, got) }) + t.Run("additional multiple volumes added but ignored", func(t *testing.T) { + jenkins := &v1alpha2.Jenkins{ + + Spec: v1alpha2.JenkinsSpec{ + Lifecycle: v1alpha2.JenkinsLifecycle{ + Ignore: v1alpha2.JenkinsLifecycleIgnore{ + IgnoredVolumes: []string{"volume-present", "volume-absent"}, + }, + }, + }, + } + pod := corev1.Pod{ + Spec: corev1.PodSpec{ + ServiceAccountName: "service-account-name", + Volumes: append(resources.GetJenkinsMasterPodBaseVolumes(jenkins), corev1.Volume{Name: "volume-present"}), + }, + } + reconciler := New(configuration.Configuration{Jenkins: jenkins}, client.JenkinsAPIConnectionSettings{}) + + got := reconciler.compareVolumes(pod) + + assert.True(t, got) + }) + } func TestJenkinsBaseConfigurationReconciler_verifyPlugins(t *testing.T) { diff --git a/pkg/configuration/base/reconciler.go b/pkg/configuration/base/reconciler.go index 940e77d0..53112074 100644 --- a/pkg/configuration/base/reconciler.go +++ b/pkg/configuration/base/reconciler.go @@ -429,7 +429,7 @@ func (r *JenkinsBaseConfigurationReconciler) ensureBaseConfiguration(jenkinsClie // isVolumeIgnored checks if the given volume name is in the list of ignored volumes func (r *JenkinsBaseConfigurationReconciler) isVolumeIgnored(volumeName string) bool { - for _, ignoredVolume := range r.Jenkins.Spec.Master.IgnoredVolumes { + for _, ignoredVolume := range r.Jenkins.Spec.Lifecycle.Ignore.IgnoredVolumes { if ignoredVolume == volumeName { return true }