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:
|
properties:
|
||||||
default_cpu_limit:
|
default_cpu_limit:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
default_cpu_request:
|
default_cpu_request:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
default_memory_limit:
|
default_memory_limit:
|
||||||
type: string
|
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:
|
default_memory_request:
|
||||||
type: string
|
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:
|
max_cpu_request:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
max_memory_request:
|
max_memory_request:
|
||||||
type: string
|
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:
|
min_cpu_limit:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
min_memory_limit:
|
min_memory_limit:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
|
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$'
|
||||||
timeouts:
|
timeouts:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|
|
||||||
|
|
@ -374,28 +374,28 @@ spec:
|
||||||
properties:
|
properties:
|
||||||
default_cpu_limit:
|
default_cpu_limit:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
default_cpu_request:
|
default_cpu_request:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
default_memory_limit:
|
default_memory_limit:
|
||||||
type: string
|
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:
|
default_memory_request:
|
||||||
type: string
|
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:
|
max_cpu_request:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
max_memory_request:
|
max_memory_request:
|
||||||
type: string
|
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:
|
min_cpu_limit:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
|
pattern: '^(\d+m|\d+(\.\d{1,3})?)$|^$'
|
||||||
min_memory_limit:
|
min_memory_limit:
|
||||||
type: string
|
type: string
|
||||||
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
|
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$|^$'
|
||||||
timeouts:
|
timeouts:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|
|
||||||
|
|
@ -1573,35 +1573,35 @@ var OperatorConfigCRDResourceValidation = apiextv1.CustomResourceValidation{
|
||||||
Properties: map[string]apiextv1.JSONSchemaProps{
|
Properties: map[string]apiextv1.JSONSchemaProps{
|
||||||
"default_cpu_limit": {
|
"default_cpu_limit": {
|
||||||
Type: "string",
|
Type: "string",
|
||||||
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$",
|
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$",
|
||||||
},
|
},
|
||||||
"default_cpu_request": {
|
"default_cpu_request": {
|
||||||
Type: "string",
|
Type: "string",
|
||||||
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$",
|
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$",
|
||||||
},
|
},
|
||||||
"default_memory_limit": {
|
"default_memory_limit": {
|
||||||
Type: "string",
|
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": {
|
"default_memory_request": {
|
||||||
Type: "string",
|
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": {
|
"max_cpu_request": {
|
||||||
Type: "string",
|
Type: "string",
|
||||||
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$",
|
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$",
|
||||||
},
|
},
|
||||||
"max_memory_request": {
|
"max_memory_request": {
|
||||||
Type: "string",
|
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": {
|
"min_cpu_limit": {
|
||||||
Type: "string",
|
Type: "string",
|
||||||
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$",
|
Pattern: "^(\\d+m|\\d+(\\.\\d{1,3})?)$|^$",
|
||||||
},
|
},
|
||||||
"min_memory_limit": {
|
"min_memory_limit": {
|
||||||
Type: "string",
|
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")},
|
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",
|
subTest: "test matchLimitsWithRequestsIfSmaller",
|
||||||
config: config.Config{
|
config: config.Config{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue