Fix resource constraints (#2735)
* Add empty string cases to patterns for pod resources * Added empty strings test case * Restored k8sres.go and changed test to zeros * Updated validation pattern in manifests/operatorconfiguration.crd.yaml and pkg/apis/acid.zalan.do/v1/crds.go
This commit is contained in:
		
							parent
							
								
									d21466dbc4
								
							
						
					
					
						commit
						f5e122e8ef
					
				|  | @ -376,28 +376,28 @@ spec: | |||
|                 properties: | ||||
|                   default_cpu_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   default_cpu_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   default_memory_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|                   default_memory_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|                   max_cpu_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   max_memory_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|                   min_cpu_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   min_memory_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|               timeouts: | ||||
|                 type: object | ||||
|                 properties: | ||||
|  |  | |||
|  | @ -374,28 +374,28 @@ spec: | |||
|                 properties: | ||||
|                   default_cpu_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   default_cpu_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   default_memory_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|                   default_memory_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|                   max_cpu_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   max_memory_request: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|                   min_cpu_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$' | ||||
|                     pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$' | ||||
|                   min_memory_limit: | ||||
|                     type: string | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' | ||||
|                     pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$' | ||||
|               timeouts: | ||||
|                 type: object | ||||
|                 properties: | ||||
|  |  | |||
|  | @ -1573,35 +1573,35 @@ var OperatorConfigCRDResourceValidation = apiextv1.CustomResourceValidation{ | |||
| 						Properties: map[string]apiextv1.JSONSchemaProps{ | ||||
| 							"default_cpu_limit": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$", | ||||
| 							}, | ||||
| 							"default_cpu_request": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$", | ||||
| 							}, | ||||
| 							"default_memory_limit": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$|^$", | ||||
| 							}, | ||||
| 							"default_memory_request": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$|^$", | ||||
| 							}, | ||||
| 							"max_cpu_request": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$", | ||||
| 							}, | ||||
| 							"max_memory_request": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$|^$", | ||||
| 							}, | ||||
| 							"min_cpu_limit": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$", | ||||
| 								Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$", | ||||
| 							}, | ||||
| 							"min_memory_limit": { | ||||
| 								Type:    "string", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", | ||||
| 								Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$|^$", | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
|  |  | |||
|  | @ -2993,6 +2993,44 @@ func TestGenerateResourceRequirements(t *testing.T) { | |||
| 				ResourceRequests: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("100m"), Memory: k8sutil.StringToPointer("100Mi")}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			subTest: "test generation of resources when min limits are all set to zero", | ||||
| 			config: config.Config{ | ||||
| 				Resources: config.Resources{ | ||||
| 					ClusterLabels:        map[string]string{"application": "spilo"}, | ||||
| 					ClusterNameLabel:     clusterNameLabel, | ||||
| 					DefaultCPURequest:    "0", | ||||
| 					DefaultCPULimit:      "0", | ||||
| 					MaxCPURequest:        "0", | ||||
| 					MinCPULimit:          "0", | ||||
| 					DefaultMemoryRequest: "0", | ||||
| 					DefaultMemoryLimit:   "0", | ||||
| 					MaxMemoryRequest:     "0", | ||||
| 					MinMemoryLimit:       "0", | ||||
| 					PodRoleLabel:         "spilo-role", | ||||
| 				}, | ||||
| 				PodManagementPolicy:     "ordered_ready", | ||||
| 				SetMemoryRequestToLimit: false, | ||||
| 			}, | ||||
| 			pgSpec: acidv1.Postgresql{ | ||||
| 				ObjectMeta: metav1.ObjectMeta{ | ||||
| 					Name:      clusterName, | ||||
| 					Namespace: namespace, | ||||
| 				}, | ||||
| 				Spec: acidv1.PostgresSpec{ | ||||
| 					Resources: &acidv1.Resources{ | ||||
| 						ResourceLimits: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("5m"), Memory: k8sutil.StringToPointer("5Mi")}, | ||||
| 					}, | ||||
| 					TeamID: "acid", | ||||
| 					Volume: acidv1.Volume{ | ||||
| 						Size: "1G", | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 			expectedResources: acidv1.Resources{ | ||||
| 				ResourceLimits: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("5m"), Memory: k8sutil.StringToPointer("5Mi")}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			subTest: "test matchLimitsWithRequestsIfSmaller", | ||||
| 			config: config.Config{ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue