refactor: define and use struct for lifecycle-ignore

This commit is contained in:
Benjamin Herbert 2025-05-22 19:55:16 +02:00
parent 2a21ee7c2c
commit dcf1b26122
No known key found for this signature in database
3 changed files with 57 additions and 3 deletions

View File

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

View File

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

View File

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