diff --git a/pkg/api/types.go b/pkg/api/types.go index 5d814f55cf..e7777fc502 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -46,7 +46,7 @@ type DeschedulerStrategy struct { // Only one of its members may be specified type StrategyParameters struct { - NodeResourceUtilizationThresholds NodeResourceUtilizationThresholds + NodeResourceUtilizationThresholds *NodeResourceUtilizationThresholds NodeAffinityType []string PodsHavingTooManyRestarts PodsHavingTooManyRestarts } diff --git a/pkg/api/v1alpha1/types.go b/pkg/api/v1alpha1/types.go index 213b63fcf8..148c2c6720 100644 --- a/pkg/api/v1alpha1/types.go +++ b/pkg/api/v1alpha1/types.go @@ -46,9 +46,9 @@ type DeschedulerStrategy struct { // Only one of its members may be specified type StrategyParameters struct { - NodeResourceUtilizationThresholds NodeResourceUtilizationThresholds `json:"nodeResourceUtilizationThresholds,omitempty"` - NodeAffinityType []string `json:"nodeAffinityType,omitempty"` - PodsHavingTooManyRestarts PodsHavingTooManyRestarts `json:"podsHavingTooManyRestarts,omitempty"` + NodeResourceUtilizationThresholds *NodeResourceUtilizationThresholds `json:"nodeResourceUtilizationThresholds,omitempty"` + NodeAffinityType []string `json:"nodeAffinityType,omitempty"` + PodsHavingTooManyRestarts PodsHavingTooManyRestarts `json:"podsHavingTooManyRestarts,omitempty"` } type Percentage float64 diff --git a/pkg/api/v1alpha1/zz_generated.conversion.go b/pkg/api/v1alpha1/zz_generated.conversion.go index d251ac64ab..1ecb0f2158 100644 --- a/pkg/api/v1alpha1/zz_generated.conversion.go +++ b/pkg/api/v1alpha1/zz_generated.conversion.go @@ -183,9 +183,7 @@ func Convert_api_PodsHavingTooManyRestarts_To_v1alpha1_PodsHavingTooManyRestarts } func autoConvert_v1alpha1_StrategyParameters_To_api_StrategyParameters(in *StrategyParameters, out *api.StrategyParameters, s conversion.Scope) error { - if err := Convert_v1alpha1_NodeResourceUtilizationThresholds_To_api_NodeResourceUtilizationThresholds(&in.NodeResourceUtilizationThresholds, &out.NodeResourceUtilizationThresholds, s); err != nil { - return err - } + out.NodeResourceUtilizationThresholds = (*api.NodeResourceUtilizationThresholds)(unsafe.Pointer(in.NodeResourceUtilizationThresholds)) out.NodeAffinityType = *(*[]string)(unsafe.Pointer(&in.NodeAffinityType)) if err := Convert_v1alpha1_PodsHavingTooManyRestarts_To_api_PodsHavingTooManyRestarts(&in.PodsHavingTooManyRestarts, &out.PodsHavingTooManyRestarts, s); err != nil { return err @@ -199,9 +197,7 @@ func Convert_v1alpha1_StrategyParameters_To_api_StrategyParameters(in *StrategyP } func autoConvert_api_StrategyParameters_To_v1alpha1_StrategyParameters(in *api.StrategyParameters, out *StrategyParameters, s conversion.Scope) error { - if err := Convert_api_NodeResourceUtilizationThresholds_To_v1alpha1_NodeResourceUtilizationThresholds(&in.NodeResourceUtilizationThresholds, &out.NodeResourceUtilizationThresholds, s); err != nil { - return err - } + out.NodeResourceUtilizationThresholds = (*NodeResourceUtilizationThresholds)(unsafe.Pointer(in.NodeResourceUtilizationThresholds)) out.NodeAffinityType = *(*[]string)(unsafe.Pointer(&in.NodeAffinityType)) if err := Convert_api_PodsHavingTooManyRestarts_To_v1alpha1_PodsHavingTooManyRestarts(&in.PodsHavingTooManyRestarts, &out.PodsHavingTooManyRestarts, s); err != nil { return err diff --git a/pkg/api/v1alpha1/zz_generated.deepcopy.go b/pkg/api/v1alpha1/zz_generated.deepcopy.go index 37420ba135..1f14a02fc3 100644 --- a/pkg/api/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/api/v1alpha1/zz_generated.deepcopy.go @@ -166,7 +166,11 @@ func (in StrategyList) DeepCopy() StrategyList { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StrategyParameters) DeepCopyInto(out *StrategyParameters) { *out = *in - in.NodeResourceUtilizationThresholds.DeepCopyInto(&out.NodeResourceUtilizationThresholds) + if in.NodeResourceUtilizationThresholds != nil { + in, out := &in.NodeResourceUtilizationThresholds, &out.NodeResourceUtilizationThresholds + *out = new(NodeResourceUtilizationThresholds) + (*in).DeepCopyInto(*out) + } if in.NodeAffinityType != nil { in, out := &in.NodeAffinityType, &out.NodeAffinityType *out = make([]string, len(*in)) diff --git a/pkg/api/zz_generated.deepcopy.go b/pkg/api/zz_generated.deepcopy.go index e046e70c15..8cae1a0713 100644 --- a/pkg/api/zz_generated.deepcopy.go +++ b/pkg/api/zz_generated.deepcopy.go @@ -166,7 +166,11 @@ func (in StrategyList) DeepCopy() StrategyList { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StrategyParameters) DeepCopyInto(out *StrategyParameters) { *out = *in - in.NodeResourceUtilizationThresholds.DeepCopyInto(&out.NodeResourceUtilizationThresholds) + if in.NodeResourceUtilizationThresholds != nil { + in, out := &in.NodeResourceUtilizationThresholds, &out.NodeResourceUtilizationThresholds + *out = new(NodeResourceUtilizationThresholds) + (*in).DeepCopyInto(*out) + } if in.NodeAffinityType != nil { in, out := &in.NodeAffinityType, &out.NodeAffinityType *out = make([]string, len(*in)) diff --git a/pkg/descheduler/strategies/lownodeutilization.go b/pkg/descheduler/strategies/lownodeutilization.go index 2208cb7de8..1673d57b51 100644 --- a/pkg/descheduler/strategies/lownodeutilization.go +++ b/pkg/descheduler/strategies/lownodeutilization.go @@ -46,6 +46,10 @@ func LowNodeUtilization(ds *options.DeschedulerServer, strategy api.DeschedulerS } // todo: move to config validation? // TODO: May be create a struct for the strategy as well, so that we don't have to pass along the all the params? + if strategy.Params.NodeResourceUtilizationThresholds == nil { + klog.V(1).Infof("NodeResourceUtilizationThresholds not set") + return + } thresholds := strategy.Params.NodeResourceUtilizationThresholds.Thresholds if !validateThresholds(thresholds) { diff --git a/pkg/descheduler/strategies/lownodeutilization_test.go b/pkg/descheduler/strategies/lownodeutilization_test.go index 40f6cb4be1..7625f86ffd 100644 --- a/pkg/descheduler/strategies/lownodeutilization_test.go +++ b/pkg/descheduler/strategies/lownodeutilization_test.go @@ -509,7 +509,7 @@ func TestWithTaints(t *testing.T) { strategy := api.DeschedulerStrategy{ Enabled: true, Params: api.StrategyParameters{ - NodeResourceUtilizationThresholds: api.NodeResourceUtilizationThresholds{ + NodeResourceUtilizationThresholds: &api.NodeResourceUtilizationThresholds{ Thresholds: api.ResourceThresholds{ v1.ResourcePods: 20, }, diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index 3325ad1f8b..92e3e267f0 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -118,7 +118,7 @@ func startEndToEndForLowNodeUtilization(clientset clientset.Interface, nodeInfor lowNodeUtilizationStrategy := deschedulerapi.DeschedulerStrategy{ Enabled: true, Params: deschedulerapi.StrategyParameters{ - NodeResourceUtilizationThresholds: deschedulerapi.NodeResourceUtilizationThresholds{ + NodeResourceUtilizationThresholds: &deschedulerapi.NodeResourceUtilizationThresholds{ Thresholds: thresholds, TargetThresholds: targetThresholds, },