#194 Allow unset resources.limits or resources.requests
This commit is contained in:
		
							parent
							
								
									edec445aed
								
							
						
					
					
						commit
						8941f746b8
					
				|  | @ -718,7 +718,7 @@ func (r *ReconcileJenkinsBaseConfiguration) compareContainers(expected corev1.Co | ||||||
| 		messages = append(messages, "Readiness probe has changed") | 		messages = append(messages, "Readiness probe has changed") | ||||||
| 		verbose = append(verbose, fmt.Sprintf("Readiness probe has changed to '%+v' in container '%s'", expected.ReadinessProbe, expected.Name)) | 		verbose = append(verbose, fmt.Sprintf("Readiness probe has changed to '%+v' in container '%s'", expected.ReadinessProbe, expected.Name)) | ||||||
| 	} | 	} | ||||||
| 	if !reflect.DeepEqual(expected.Resources, actual.Resources) { | 	if !compareContainerResources(expected.Resources, actual.Resources) { | ||||||
| 		messages = append(messages, "Resources have changed") | 		messages = append(messages, "Resources have changed") | ||||||
| 		verbose = append(verbose, fmt.Sprintf("Resources have changed to '%+v' in container '%s'", expected.Resources, expected.Name)) | 		verbose = append(verbose, fmt.Sprintf("Resources have changed to '%+v' in container '%s'", expected.Resources, expected.Name)) | ||||||
| 	} | 	} | ||||||
|  | @ -738,6 +738,33 @@ func (r *ReconcileJenkinsBaseConfiguration) compareContainers(expected corev1.Co | ||||||
| 	return messages, verbose | 	return messages, verbose | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func compareContainerResources(expected corev1.ResourceRequirements, actual corev1.ResourceRequirements) bool { | ||||||
|  | 	expectedRequestCPU, expectedRequestCPUSet := expected.Requests[corev1.ResourceCPU] | ||||||
|  | 	expectedRequestMemory, expectedRequestMemorySet := expected.Requests[corev1.ResourceMemory] | ||||||
|  | 	expectedLimitCPU, expectedLimitCPUSet := expected.Limits[corev1.ResourceCPU] | ||||||
|  | 	expectedLimitMemory, expectedLimitMemorySet := expected.Limits[corev1.ResourceMemory] | ||||||
|  | 
 | ||||||
|  | 	actualRequestCPU, actualRequestCPUSet := actual.Requests[corev1.ResourceCPU] | ||||||
|  | 	actualRequestMemory, actualRequestMemorySet := actual.Requests[corev1.ResourceMemory] | ||||||
|  | 	actualLimitCPU, actualLimitCPUSet := actual.Limits[corev1.ResourceCPU] | ||||||
|  | 	actualLimitMemory, actualLimitMemorySet := actual.Limits[corev1.ResourceMemory] | ||||||
|  | 
 | ||||||
|  | 	if expectedRequestCPUSet && (!actualRequestCPUSet || expectedRequestCPU.String() != actualRequestCPU.String()) { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if expectedRequestMemorySet && (!actualRequestMemorySet || expectedRequestMemory.String() != actualRequestMemory.String()) { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if expectedLimitCPUSet && (!actualLimitCPUSet || expectedLimitCPU.String() != actualLimitCPU.String()) { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if expectedLimitMemorySet && (!actualLimitMemorySet || expectedLimitMemory.String() != actualLimitMemory.String()) { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func compareImagePullSecrets(expected, actual []corev1.LocalObjectReference) bool { | func compareImagePullSecrets(expected, actual []corev1.LocalObjectReference) bool { | ||||||
| 	for _, expected := range expected { | 	for _, expected := range expected { | ||||||
| 		found := false | 		found := false | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ import ( | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| 	corev1 "k8s.io/api/core/v1" | 	corev1 "k8s.io/api/core/v1" | ||||||
| 	rbacv1 "k8s.io/api/rbac/v1" | 	rbacv1 "k8s.io/api/rbac/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/api/resource" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/client-go/kubernetes/scheme" | 	"k8s.io/client-go/kubernetes/scheme" | ||||||
| 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client" | 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client" | ||||||
|  | @ -920,3 +921,191 @@ func TestEnsureExtraRBAC(t *testing.T) { | ||||||
| 		assert.Equal(t, jenkins.Spec.Roles[0], roleBindings.Items[2].RoleRef) | 		assert.Equal(t, jenkins.Spec.Roles[0], roleBindings.Items[2].RoleRef) | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestCompareContainerResources(t *testing.T) { | ||||||
|  | 	t.Run("empty", func(t *testing.T) { | ||||||
|  | 		var expected corev1.ResourceRequirements | ||||||
|  | 		var actual corev1.ResourceRequirements | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.True(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("expected resources empty, actual resources set", func(t *testing.T) { | ||||||
|  | 		var expected corev1.ResourceRequirements | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU:    resource.MustParse("50m"), | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("50Mi"), | ||||||
|  | 			}, | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU:    resource.MustParse("100m"), | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("100Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.True(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("request CPU the same values", func(t *testing.T) { | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("50m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		expected := actual | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.True(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("request memory the same values", func(t *testing.T) { | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("50Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		expected := actual | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.True(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("limit CPU the same values", func(t *testing.T) { | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("50m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		expected := actual | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.True(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("limit memory the same values", func(t *testing.T) { | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("50Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		expected := actual | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.True(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("request CPU different values", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("5m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("50m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("request memory different values", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("5Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("50Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("limit CPU different values", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("5m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("50m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("limit memory different values", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("5Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		actual := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("50Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("request CPU not set in actual", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("5m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		var actual corev1.ResourceRequirements | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("request memory not set in actual", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Requests: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("5Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		var actual corev1.ResourceRequirements | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("limit CPU not set in actual", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceCPU: resource.MustParse("5m"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		var actual corev1.ResourceRequirements | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | 	t.Run("limit memory not set in actual", func(t *testing.T) { | ||||||
|  | 		expected := corev1.ResourceRequirements{ | ||||||
|  | 			Limits: corev1.ResourceList{ | ||||||
|  | 				corev1.ResourceMemory: resource.MustParse("5Mi"), | ||||||
|  | 			}, | ||||||
|  | 		} | ||||||
|  | 		var actual corev1.ResourceRequirements | ||||||
|  | 
 | ||||||
|  | 		got := compareContainerResources(expected, actual) | ||||||
|  | 
 | ||||||
|  | 		assert.False(t, got) | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -540,12 +540,7 @@ func setDefaultsForContainer(jenkins *v1alpha2.Jenkins, containerIndex int, logg | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func isResourceRequirementsNotSet(requirements corev1.ResourceRequirements) bool { | func isResourceRequirementsNotSet(requirements corev1.ResourceRequirements) bool { | ||||||
| 	_, requestCPUSet := requirements.Requests[corev1.ResourceCPU] | 	return reflect.DeepEqual(requirements, corev1.ResourceRequirements{}) | ||||||
| 	_, requestMemorySet := requirements.Requests[corev1.ResourceMemory] |  | ||||||
| 	_, limitCPUSet := requirements.Limits[corev1.ResourceCPU] |  | ||||||
| 	_, limitMemorySet := requirements.Limits[corev1.ResourceMemory] |  | ||||||
| 
 |  | ||||||
| 	return !limitCPUSet || !limitMemorySet || !requestCPUSet || !requestMemorySet |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func basePlugins() (result []v1alpha2.Plugin) { | func basePlugins() (result []v1alpha2.Plugin) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue