feat: allow to ignore volumes during reconciliation
This commit is contained in:
		
							parent
							
								
									8a66d658eb
								
							
						
					
					
						commit
						2a21ee7c2c
					
				|  | @ -400,6 +400,10 @@ type JenkinsMaster struct { | ||||||
| 	// Defaults to 30 seconds.
 | 	// Defaults to 30 seconds.
 | ||||||
| 	// +optional
 | 	// +optional
 | ||||||
| 	TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"` | 	TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// IgnoredVolumes defines the list of volume names that should be excluded from processing or consideration.
 | ||||||
|  | 	// +optional
 | ||||||
|  | 	IgnoredVolumes []string `json:"ignoredVolumes,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Service defines Kubernetes service attributes
 | // Service defines Kubernetes service attributes
 | ||||||
|  |  | ||||||
|  | @ -160,6 +160,47 @@ func TestCompareVolumes(t *testing.T) { | ||||||
| 
 | 
 | ||||||
| 		assert.True(t, got) | 		assert.True(t, got) | ||||||
| 	}) | 	}) | ||||||
|  | 
 | ||||||
|  | 	t.Run("different - additional workspace identity volume", func(t *testing.T) { | ||||||
|  | 		jenkins := &v1alpha2.Jenkins{ | ||||||
|  | 			Spec: v1alpha2.JenkinsSpec{ | ||||||
|  | 				Master: v1alpha2.JenkinsMaster{}, | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		pod := corev1.Pod{ | ||||||
|  | 			Spec: corev1.PodSpec{ | ||||||
|  | 				ServiceAccountName: "service-account-name", | ||||||
|  | 				Volumes:            append(resources.GetJenkinsMasterPodBaseVolumes(jenkins), corev1.Volume{Name: "azure-identity-token"}), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		reconciler := New(configuration.Configuration{Jenkins: jenkins}, client.JenkinsAPIConnectionSettings{}) | ||||||
|  | 
 | ||||||
|  | 		got := reconciler.compareVolumes(pod) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	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"}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		pod := corev1.Pod{ | ||||||
|  | 			Spec: corev1.PodSpec{ | ||||||
|  | 				ServiceAccountName: "service-account-name", | ||||||
|  | 				Volumes:            append(resources.GetJenkinsMasterPodBaseVolumes(jenkins), corev1.Volume{Name: "azure-identity-token"}), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		reconciler := New(configuration.Configuration{Jenkins: jenkins}, client.JenkinsAPIConnectionSettings{}) | ||||||
|  | 
 | ||||||
|  | 		got := reconciler.compareVolumes(pod) | ||||||
|  | 
 | ||||||
|  | 		assert.True(t, got) | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestJenkinsBaseConfigurationReconciler_verifyPlugins(t *testing.T) { | func TestJenkinsBaseConfigurationReconciler_verifyPlugins(t *testing.T) { | ||||||
|  |  | ||||||
|  | @ -294,6 +294,11 @@ func CompareContainerVolumeMounts(expected corev1.Container, actual corev1.Conta | ||||||
| func (r *JenkinsBaseConfigurationReconciler) compareVolumes(actualPod corev1.Pod) bool { | func (r *JenkinsBaseConfigurationReconciler) compareVolumes(actualPod corev1.Pod) bool { | ||||||
| 	var toCompare []corev1.Volume | 	var toCompare []corev1.Volume | ||||||
| 	for _, volume := range actualPod.Spec.Volumes { | 	for _, volume := range actualPod.Spec.Volumes { | ||||||
|  | 
 | ||||||
|  | 		if r.isVolumeIgnored(volume.Name) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		// filter out service account
 | 		// filter out service account
 | ||||||
| 		if strings.HasPrefix(volume.Name, actualPod.Spec.ServiceAccountName) { | 		if strings.HasPrefix(volume.Name, actualPod.Spec.ServiceAccountName) { | ||||||
| 			continue | 			continue | ||||||
|  | @ -421,3 +426,13 @@ func (r *JenkinsBaseConfigurationReconciler) ensureBaseConfiguration(jenkinsClie | ||||||
| 	}) | 	}) | ||||||
| 	return reconcile.Result{Requeue: requeue}, err | 	return reconcile.Result{Requeue: requeue}, err | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // 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 { | ||||||
|  | 		if ignoredVolume == volumeName { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue