[cc][api]: Introduce scheduler v1beta3 api
Changes in pkg/apis/scheduler reflecting the changes from staging. The weights of following priority plugins were increased: - TaintTolerations - NodeAffinity - InterPodAffinity as they're user facing priorities and they should be more influential when compared to default plugins which don't have any user say. xref: https://github.com/kubernetes/enhancements/pull/2850
This commit is contained in:
107
pkg/scheduler/apis/config/v1beta3/conversion.go
Normal file
107
pkg/scheduler/apis/config/v1beta3/conversion.go
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
Copyright 2021 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"k8s.io/apimachinery/pkg/conversion"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||
"k8s.io/kube-scheduler/config/v1beta3"
|
||||
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||
)
|
||||
|
||||
var (
|
||||
// pluginArgConversionScheme is a scheme with internal and v1beta3 registered,
|
||||
// used for defaulting/converting typed PluginConfig Args.
|
||||
// Access via getPluginArgConversionScheme()
|
||||
pluginArgConversionScheme *runtime.Scheme
|
||||
initPluginArgConversionScheme sync.Once
|
||||
)
|
||||
|
||||
func GetPluginArgConversionScheme() *runtime.Scheme {
|
||||
initPluginArgConversionScheme.Do(func() {
|
||||
// set up the scheme used for plugin arg conversion
|
||||
pluginArgConversionScheme = runtime.NewScheme()
|
||||
utilruntime.Must(AddToScheme(pluginArgConversionScheme))
|
||||
utilruntime.Must(config.AddToScheme(pluginArgConversionScheme))
|
||||
})
|
||||
return pluginArgConversionScheme
|
||||
}
|
||||
|
||||
func Convert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in *v1beta3.KubeSchedulerConfiguration, out *config.KubeSchedulerConfiguration, s conversion.Scope) error {
|
||||
if err := autoConvert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in, out, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return convertToInternalPluginConfigArgs(out)
|
||||
}
|
||||
|
||||
// convertToInternalPluginConfigArgs converts PluginConfig#Args into internal
|
||||
// types using a scheme, after applying defaults.
|
||||
func convertToInternalPluginConfigArgs(out *config.KubeSchedulerConfiguration) error {
|
||||
scheme := GetPluginArgConversionScheme()
|
||||
for i := range out.Profiles {
|
||||
prof := &out.Profiles[i]
|
||||
for j := range prof.PluginConfig {
|
||||
args := prof.PluginConfig[j].Args
|
||||
if args == nil {
|
||||
continue
|
||||
}
|
||||
if _, isUnknown := args.(*runtime.Unknown); isUnknown {
|
||||
continue
|
||||
}
|
||||
internalArgs, err := scheme.ConvertToVersion(args, config.SchemeGroupVersion)
|
||||
if err != nil {
|
||||
return fmt.Errorf("converting .Profiles[%d].PluginConfig[%d].Args into internal type: %w", i, j, err)
|
||||
}
|
||||
prof.PluginConfig[j].Args = internalArgs
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Convert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(in *config.KubeSchedulerConfiguration, out *v1beta3.KubeSchedulerConfiguration, s conversion.Scope) error {
|
||||
if err := autoConvert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(in, out, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return convertToExternalPluginConfigArgs(out)
|
||||
}
|
||||
|
||||
// convertToExternalPluginConfigArgs converts PluginConfig#Args into
|
||||
// external (versioned) types using a scheme.
|
||||
func convertToExternalPluginConfigArgs(out *v1beta3.KubeSchedulerConfiguration) error {
|
||||
scheme := GetPluginArgConversionScheme()
|
||||
for i := range out.Profiles {
|
||||
for j := range out.Profiles[i].PluginConfig {
|
||||
args := out.Profiles[i].PluginConfig[j].Args
|
||||
if args.Object == nil {
|
||||
continue
|
||||
}
|
||||
if _, isUnknown := args.Object.(*runtime.Unknown); isUnknown {
|
||||
continue
|
||||
}
|
||||
externalArgs, err := scheme.ConvertToVersion(args.Object, SchemeGroupVersion)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
out.Profiles[i].PluginConfig[j].Args.Object = externalArgs
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
201
pkg/scheduler/apis/config/v1beta3/default_plugins.go
Normal file
201
pkg/scheduler/apis/config/v1beta3/default_plugins.go
Normal file
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
Copyright 2021 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kube-scheduler/config/v1beta3"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||
"k8s.io/utils/pointer"
|
||||
)
|
||||
|
||||
// getDefaultPlugins returns the default set of plugins.
|
||||
func getDefaultPlugins() *v1beta3.Plugins {
|
||||
plugins := &v1beta3.Plugins{
|
||||
QueueSort: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.PrioritySort},
|
||||
},
|
||||
},
|
||||
PreFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.NodeAffinity},
|
||||
},
|
||||
},
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeUnschedulable},
|
||||
{Name: names.NodeName},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.EBSLimits},
|
||||
{Name: names.GCEPDLimits},
|
||||
{Name: names.NodeVolumeLimits},
|
||||
{Name: names.AzureDiskLimits},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.VolumeZone},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
},
|
||||
},
|
||||
PostFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultPreemption},
|
||||
},
|
||||
},
|
||||
PreScore: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
},
|
||||
},
|
||||
Score: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.NodeResourcesFit, Weight: pointer.Int32Ptr(1)},
|
||||
// Weight is doubled because:
|
||||
// - This is a score coming from user preference.
|
||||
{Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
// Weight is doubled because:
|
||||
// - This is a score coming from user preference.
|
||||
{Name: names.NodeAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
// Weight is doubled because:
|
||||
// - This is a score coming from user preference.
|
||||
// - It makes its signal comparable to NodeResourcesFit.LeastAllocated.
|
||||
{Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)},
|
||||
// Weight is tripled because:
|
||||
// - This is a score coming from user preference.
|
||||
// - Usage of node tainting to group nodes in the cluster is becoming a valid use-case more often
|
||||
// for many user workloads
|
||||
{Name: names.TaintToleration, Weight: pointer.Int32Ptr(3)},
|
||||
},
|
||||
},
|
||||
Reserve: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
PreBind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
Bind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultBinder},
|
||||
},
|
||||
},
|
||||
}
|
||||
applyFeatureGates(plugins)
|
||||
|
||||
return plugins
|
||||
}
|
||||
|
||||
func applyFeatureGates(config *v1beta3.Plugins) {
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) {
|
||||
config.Score.Enabled = append(config.Score.Enabled, v1beta3.Plugin{Name: names.VolumeBinding, Weight: pointer.Int32Ptr(1)})
|
||||
}
|
||||
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) {
|
||||
// When feature is enabled, the default spreading is done by
|
||||
// PodTopologySpread plugin, which is enabled by default.
|
||||
klog.InfoS("Registering SelectorSpread plugin")
|
||||
s := v1beta3.Plugin{Name: names.SelectorSpread}
|
||||
config.PreScore.Enabled = append(config.PreScore.Enabled, s)
|
||||
s.Weight = pointer.Int32Ptr(1)
|
||||
config.Score.Enabled = append(config.Score.Enabled, s)
|
||||
}
|
||||
}
|
||||
|
||||
// mergePlugins merges the custom set into the given default one, handling disabled sets.
|
||||
func mergePlugins(defaultPlugins, customPlugins *v1beta3.Plugins) *v1beta3.Plugins {
|
||||
if customPlugins == nil {
|
||||
return defaultPlugins
|
||||
}
|
||||
|
||||
defaultPlugins.QueueSort = mergePluginSet(defaultPlugins.QueueSort, customPlugins.QueueSort)
|
||||
defaultPlugins.PreFilter = mergePluginSet(defaultPlugins.PreFilter, customPlugins.PreFilter)
|
||||
defaultPlugins.Filter = mergePluginSet(defaultPlugins.Filter, customPlugins.Filter)
|
||||
defaultPlugins.PostFilter = mergePluginSet(defaultPlugins.PostFilter, customPlugins.PostFilter)
|
||||
defaultPlugins.PreScore = mergePluginSet(defaultPlugins.PreScore, customPlugins.PreScore)
|
||||
defaultPlugins.Score = mergePluginSet(defaultPlugins.Score, customPlugins.Score)
|
||||
defaultPlugins.Reserve = mergePluginSet(defaultPlugins.Reserve, customPlugins.Reserve)
|
||||
defaultPlugins.Permit = mergePluginSet(defaultPlugins.Permit, customPlugins.Permit)
|
||||
defaultPlugins.PreBind = mergePluginSet(defaultPlugins.PreBind, customPlugins.PreBind)
|
||||
defaultPlugins.Bind = mergePluginSet(defaultPlugins.Bind, customPlugins.Bind)
|
||||
defaultPlugins.PostBind = mergePluginSet(defaultPlugins.PostBind, customPlugins.PostBind)
|
||||
return defaultPlugins
|
||||
}
|
||||
|
||||
type pluginIndex struct {
|
||||
index int
|
||||
plugin v1beta3.Plugin
|
||||
}
|
||||
|
||||
func mergePluginSet(defaultPluginSet, customPluginSet v1beta3.PluginSet) v1beta3.PluginSet {
|
||||
disabledPlugins := sets.NewString()
|
||||
enabledCustomPlugins := make(map[string]pluginIndex)
|
||||
// replacedPluginIndex is a set of index of plugins, which have replaced the default plugins.
|
||||
replacedPluginIndex := sets.NewInt()
|
||||
for _, disabledPlugin := range customPluginSet.Disabled {
|
||||
disabledPlugins.Insert(disabledPlugin.Name)
|
||||
}
|
||||
for index, enabledPlugin := range customPluginSet.Enabled {
|
||||
enabledCustomPlugins[enabledPlugin.Name] = pluginIndex{index, enabledPlugin}
|
||||
}
|
||||
var enabledPlugins []v1beta3.Plugin
|
||||
if !disabledPlugins.Has("*") {
|
||||
for _, defaultEnabledPlugin := range defaultPluginSet.Enabled {
|
||||
if disabledPlugins.Has(defaultEnabledPlugin.Name) {
|
||||
continue
|
||||
}
|
||||
// The default plugin is explicitly re-configured, update the default plugin accordingly.
|
||||
if customPlugin, ok := enabledCustomPlugins[defaultEnabledPlugin.Name]; ok {
|
||||
klog.InfoS("Default plugin is explicitly re-configured; overriding", "plugin", defaultEnabledPlugin.Name)
|
||||
// Update the default plugin in place to preserve order.
|
||||
defaultEnabledPlugin = customPlugin.plugin
|
||||
replacedPluginIndex.Insert(customPlugin.index)
|
||||
}
|
||||
enabledPlugins = append(enabledPlugins, defaultEnabledPlugin)
|
||||
}
|
||||
}
|
||||
|
||||
// Append all the custom plugins which haven't replaced any default plugins.
|
||||
// Note: duplicated custom plugins will still be appended here.
|
||||
// If so, the instantiation of scheduler framework will detect it and abort.
|
||||
for index, plugin := range customPluginSet.Enabled {
|
||||
if !replacedPluginIndex.Has(index) {
|
||||
enabledPlugins = append(enabledPlugins, plugin)
|
||||
}
|
||||
}
|
||||
return v1beta3.PluginSet{Enabled: enabledPlugins}
|
||||
}
|
||||
464
pkg/scheduler/apis/config/v1beta3/default_plugins_test.go
Normal file
464
pkg/scheduler/apis/config/v1beta3/default_plugins_test.go
Normal file
@@ -0,0 +1,464 @@
|
||||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
"k8s.io/kube-scheduler/config/v1beta3"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"k8s.io/apiserver/pkg/util/feature"
|
||||
"k8s.io/component-base/featuregate"
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||
"k8s.io/utils/pointer"
|
||||
)
|
||||
|
||||
func TestApplyFeatureGates(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
features map[featuregate.Feature]bool
|
||||
wantConfig *v1beta3.Plugins
|
||||
}{
|
||||
{
|
||||
name: "Feature gates disabled",
|
||||
wantConfig: &v1beta3.Plugins{
|
||||
QueueSort: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.PrioritySort},
|
||||
},
|
||||
},
|
||||
PreFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.NodeAffinity},
|
||||
},
|
||||
},
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeUnschedulable},
|
||||
{Name: names.NodeName},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.EBSLimits},
|
||||
{Name: names.GCEPDLimits},
|
||||
{Name: names.NodeVolumeLimits},
|
||||
{Name: names.AzureDiskLimits},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.VolumeZone},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
},
|
||||
},
|
||||
PostFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultPreemption},
|
||||
},
|
||||
},
|
||||
PreScore: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
},
|
||||
},
|
||||
Score: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.NodeResourcesFit, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.NodeAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.TaintToleration, Weight: pointer.Int32Ptr(3)},
|
||||
},
|
||||
},
|
||||
Reserve: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
PreBind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
Bind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultBinder},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "DefaultPodTopologySpread disabled",
|
||||
features: map[featuregate.Feature]bool{
|
||||
features.DefaultPodTopologySpread: false,
|
||||
},
|
||||
wantConfig: &v1beta3.Plugins{
|
||||
QueueSort: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.PrioritySort},
|
||||
},
|
||||
},
|
||||
PreFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.NodeAffinity},
|
||||
},
|
||||
},
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeUnschedulable},
|
||||
{Name: names.NodeName},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.EBSLimits},
|
||||
{Name: names.GCEPDLimits},
|
||||
{Name: names.NodeVolumeLimits},
|
||||
{Name: names.AzureDiskLimits},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.VolumeZone},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
},
|
||||
},
|
||||
PostFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultPreemption},
|
||||
},
|
||||
},
|
||||
PreScore: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
{Name: names.SelectorSpread},
|
||||
},
|
||||
},
|
||||
Score: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.NodeResourcesFit, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.NodeAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.TaintToleration, Weight: pointer.Int32Ptr(3)},
|
||||
{Name: names.SelectorSpread, Weight: pointer.Int32Ptr(1)},
|
||||
},
|
||||
},
|
||||
Reserve: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
PreBind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
Bind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultBinder},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
for k, v := range test.features {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, k, v)()
|
||||
}
|
||||
|
||||
gotConfig := getDefaultPlugins()
|
||||
if diff := cmp.Diff(test.wantConfig, gotConfig); diff != "" {
|
||||
t.Errorf("unexpected config diff (-want, +got): %s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestMergePlugins(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
customPlugins *v1beta3.Plugins
|
||||
defaultPlugins *v1beta3.Plugins
|
||||
expectedPlugins *v1beta3.Plugins
|
||||
}{
|
||||
{
|
||||
name: "AppendCustomPlugin",
|
||||
customPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "CustomPlugin"},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
{Name: "CustomPlugin"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "InsertAfterDefaultPlugins2",
|
||||
customPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "CustomPlugin"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
Disabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "CustomPlugin"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "InsertBeforeAllPlugins",
|
||||
customPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "CustomPlugin"},
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
Disabled: []v1beta3.Plugin{
|
||||
{Name: "*"},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "CustomPlugin"},
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ReorderDefaultPlugins",
|
||||
customPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin2"},
|
||||
{Name: "DefaultPlugin1"},
|
||||
},
|
||||
Disabled: []v1beta3.Plugin{
|
||||
{Name: "*"},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin2"},
|
||||
{Name: "DefaultPlugin1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ApplyNilCustomPlugin",
|
||||
customPlugins: nil,
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "DefaultPlugin1"},
|
||||
{Name: "DefaultPlugin2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "CustomPluginOverrideDefaultPlugin",
|
||||
customPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1", Weight: pointer.Int32Ptr(2)},
|
||||
{Name: "Plugin3", Weight: pointer.Int32Ptr(3)},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
{Name: "Plugin2"},
|
||||
{Name: "Plugin3"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1", Weight: pointer.Int32Ptr(2)},
|
||||
{Name: "Plugin2"},
|
||||
{Name: "Plugin3", Weight: pointer.Int32Ptr(3)},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "OrderPreserveAfterOverride",
|
||||
customPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(2)},
|
||||
{Name: "Plugin1", Weight: pointer.Int32Ptr(1)},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
{Name: "Plugin2"},
|
||||
{Name: "Plugin3"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1", Weight: pointer.Int32Ptr(1)},
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(2)},
|
||||
{Name: "Plugin3"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "RepeatedCustomPlugin",
|
||||
customPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(2)},
|
||||
{Name: "Plugin3"},
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(4)},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
{Name: "Plugin2"},
|
||||
{Name: "Plugin3"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta3.Plugins{
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(4)},
|
||||
{Name: "Plugin3"},
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(2)},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
test.defaultPlugins = mergePlugins(test.defaultPlugins, test.customPlugins)
|
||||
if d := cmp.Diff(test.expectedPlugins, test.defaultPlugins); d != "" {
|
||||
t.Fatalf("plugins mismatch (-want +got):\n%s", d)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
257
pkg/scheduler/apis/config/v1beta3/defaults.go
Normal file
257
pkg/scheduler/apis/config/v1beta3/defaults.go
Normal file
@@ -0,0 +1,257 @@
|
||||
/*
|
||||
Copyright 2021 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apiserver/pkg/util/feature"
|
||||
componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1"
|
||||
"k8s.io/kube-scheduler/config/v1beta3"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||
"k8s.io/utils/pointer"
|
||||
)
|
||||
|
||||
var defaultResourceSpec = []v1beta3.ResourceSpec{
|
||||
{Name: string(v1.ResourceCPU), Weight: 1},
|
||||
{Name: string(v1.ResourceMemory), Weight: 1},
|
||||
}
|
||||
|
||||
func addDefaultingFuncs(scheme *runtime.Scheme) error {
|
||||
return RegisterDefaults(scheme)
|
||||
}
|
||||
|
||||
func pluginsNames(p *v1beta3.Plugins) []string {
|
||||
if p == nil {
|
||||
return nil
|
||||
}
|
||||
extensions := []v1beta3.PluginSet{
|
||||
p.PreFilter,
|
||||
p.Filter,
|
||||
p.PostFilter,
|
||||
p.Reserve,
|
||||
p.PreScore,
|
||||
p.Score,
|
||||
p.PreBind,
|
||||
p.Bind,
|
||||
p.PostBind,
|
||||
p.Permit,
|
||||
p.QueueSort,
|
||||
}
|
||||
n := sets.NewString()
|
||||
for _, e := range extensions {
|
||||
for _, pg := range e.Enabled {
|
||||
n.Insert(pg.Name)
|
||||
}
|
||||
}
|
||||
return n.List()
|
||||
}
|
||||
|
||||
func setDefaults_KubeSchedulerProfile(prof *v1beta3.KubeSchedulerProfile) {
|
||||
// Set default plugins.
|
||||
prof.Plugins = mergePlugins(getDefaultPlugins(), prof.Plugins)
|
||||
|
||||
// Set default plugin configs.
|
||||
scheme := GetPluginArgConversionScheme()
|
||||
existingConfigs := sets.NewString()
|
||||
for j := range prof.PluginConfig {
|
||||
existingConfigs.Insert(prof.PluginConfig[j].Name)
|
||||
args := prof.PluginConfig[j].Args.Object
|
||||
if _, isUnknown := args.(*runtime.Unknown); isUnknown {
|
||||
continue
|
||||
}
|
||||
scheme.Default(args)
|
||||
}
|
||||
|
||||
// Append default configs for plugins that didn't have one explicitly set.
|
||||
for _, name := range pluginsNames(prof.Plugins) {
|
||||
if existingConfigs.Has(name) {
|
||||
continue
|
||||
}
|
||||
gvk := v1beta3.SchemeGroupVersion.WithKind(name + "Args")
|
||||
args, err := scheme.New(gvk)
|
||||
if err != nil {
|
||||
// This plugin is out-of-tree or doesn't require configuration.
|
||||
continue
|
||||
}
|
||||
scheme.Default(args)
|
||||
args.GetObjectKind().SetGroupVersionKind(gvk)
|
||||
prof.PluginConfig = append(prof.PluginConfig, v1beta3.PluginConfig{
|
||||
Name: name,
|
||||
Args: runtime.RawExtension{Object: args},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// SetDefaults_KubeSchedulerConfiguration sets additional defaults
|
||||
func SetDefaults_KubeSchedulerConfiguration(obj *v1beta3.KubeSchedulerConfiguration) {
|
||||
if obj.Parallelism == nil {
|
||||
obj.Parallelism = pointer.Int32Ptr(16)
|
||||
}
|
||||
|
||||
if len(obj.Profiles) == 0 {
|
||||
obj.Profiles = append(obj.Profiles, v1beta3.KubeSchedulerProfile{})
|
||||
}
|
||||
// Only apply a default scheduler name when there is a single profile.
|
||||
// Validation will ensure that every profile has a non-empty unique name.
|
||||
if len(obj.Profiles) == 1 && obj.Profiles[0].SchedulerName == nil {
|
||||
obj.Profiles[0].SchedulerName = pointer.StringPtr(v1.DefaultSchedulerName)
|
||||
}
|
||||
|
||||
// Add the default set of plugins and apply the configuration.
|
||||
for i := range obj.Profiles {
|
||||
prof := &obj.Profiles[i]
|
||||
setDefaults_KubeSchedulerProfile(prof)
|
||||
}
|
||||
|
||||
if obj.PercentageOfNodesToScore == nil {
|
||||
percentageOfNodesToScore := int32(config.DefaultPercentageOfNodesToScore)
|
||||
obj.PercentageOfNodesToScore = &percentageOfNodesToScore
|
||||
}
|
||||
|
||||
if len(obj.LeaderElection.ResourceLock) == 0 {
|
||||
// Use lease-based leader election to reduce cost.
|
||||
// We migrated for EndpointsLease lock in 1.17 and starting in 1.20 we
|
||||
// migrated to Lease lock.
|
||||
obj.LeaderElection.ResourceLock = "leases"
|
||||
}
|
||||
if len(obj.LeaderElection.ResourceNamespace) == 0 {
|
||||
obj.LeaderElection.ResourceNamespace = v1beta3.SchedulerDefaultLockObjectNamespace
|
||||
}
|
||||
if len(obj.LeaderElection.ResourceName) == 0 {
|
||||
obj.LeaderElection.ResourceName = v1beta3.SchedulerDefaultLockObjectName
|
||||
}
|
||||
|
||||
if len(obj.ClientConnection.ContentType) == 0 {
|
||||
obj.ClientConnection.ContentType = "application/vnd.kubernetes.protobuf"
|
||||
}
|
||||
// Scheduler has an opinion about QPS/Burst, setting specific defaults for itself, instead of generic settings.
|
||||
if obj.ClientConnection.QPS == 0.0 {
|
||||
obj.ClientConnection.QPS = 50.0
|
||||
}
|
||||
if obj.ClientConnection.Burst == 0 {
|
||||
obj.ClientConnection.Burst = 100
|
||||
}
|
||||
|
||||
// Use the default LeaderElectionConfiguration options
|
||||
componentbaseconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection)
|
||||
|
||||
if obj.PodInitialBackoffSeconds == nil {
|
||||
val := int64(1)
|
||||
obj.PodInitialBackoffSeconds = &val
|
||||
}
|
||||
|
||||
if obj.PodMaxBackoffSeconds == nil {
|
||||
val := int64(10)
|
||||
obj.PodMaxBackoffSeconds = &val
|
||||
}
|
||||
|
||||
// Enable profiling by default in the scheduler
|
||||
if obj.EnableProfiling == nil {
|
||||
enableProfiling := true
|
||||
obj.EnableProfiling = &enableProfiling
|
||||
}
|
||||
|
||||
// Enable contention profiling by default if profiling is enabled
|
||||
if *obj.EnableProfiling && obj.EnableContentionProfiling == nil {
|
||||
enableContentionProfiling := true
|
||||
obj.EnableContentionProfiling = &enableContentionProfiling
|
||||
}
|
||||
}
|
||||
|
||||
func SetDefaults_DefaultPreemptionArgs(obj *v1beta3.DefaultPreemptionArgs) {
|
||||
if obj.MinCandidateNodesPercentage == nil {
|
||||
obj.MinCandidateNodesPercentage = pointer.Int32Ptr(10)
|
||||
}
|
||||
if obj.MinCandidateNodesAbsolute == nil {
|
||||
obj.MinCandidateNodesAbsolute = pointer.Int32Ptr(100)
|
||||
}
|
||||
}
|
||||
|
||||
func SetDefaults_InterPodAffinityArgs(obj *v1beta3.InterPodAffinityArgs) {
|
||||
// Note that an object is created manually in cmd/kube-scheduler/app/options/deprecated.go
|
||||
// DeprecatedOptions#ApplyTo.
|
||||
// Update that object if a new default field is added here.
|
||||
if obj.HardPodAffinityWeight == nil {
|
||||
obj.HardPodAffinityWeight = pointer.Int32Ptr(1)
|
||||
}
|
||||
}
|
||||
|
||||
func SetDefaults_VolumeBindingArgs(obj *v1beta3.VolumeBindingArgs) {
|
||||
if obj.BindTimeoutSeconds == nil {
|
||||
obj.BindTimeoutSeconds = pointer.Int64Ptr(600)
|
||||
}
|
||||
if len(obj.Shape) == 0 && feature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) {
|
||||
obj.Shape = []v1beta3.UtilizationShapePoint{
|
||||
{
|
||||
Utilization: 0,
|
||||
Score: 0,
|
||||
},
|
||||
{
|
||||
Utilization: 100,
|
||||
Score: int32(config.MaxCustomPriorityScore),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func SetDefaults_NodeResourcesBalancedAllocationArgs(obj *v1beta3.NodeResourcesBalancedAllocationArgs) {
|
||||
if len(obj.Resources) == 0 {
|
||||
obj.Resources = append(obj.Resources,
|
||||
v1beta3.ResourceSpec{Name: string(v1.ResourceCPU), Weight: 1},
|
||||
v1beta3.ResourceSpec{Name: string(v1.ResourceMemory), Weight: 1},
|
||||
)
|
||||
}
|
||||
// If the weight is not set or it is explicitly set to 0, then apply the default weight(1) instead.
|
||||
for i := range obj.Resources {
|
||||
if obj.Resources[i].Weight == 0 {
|
||||
obj.Resources[i].Weight = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func SetDefaults_PodTopologySpreadArgs(obj *v1beta3.PodTopologySpreadArgs) {
|
||||
if feature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) {
|
||||
if obj.DefaultingType == "" {
|
||||
obj.DefaultingType = v1beta3.SystemDefaulting
|
||||
}
|
||||
return
|
||||
}
|
||||
if obj.DefaultingType == "" {
|
||||
obj.DefaultingType = v1beta3.ListDefaulting
|
||||
}
|
||||
}
|
||||
|
||||
func SetDefaults_NodeResourcesFitArgs(obj *v1beta3.NodeResourcesFitArgs) {
|
||||
if obj.ScoringStrategy == nil {
|
||||
obj.ScoringStrategy = &v1beta3.ScoringStrategy{
|
||||
Type: v1beta3.ScoringStrategyType(config.LeastAllocated),
|
||||
Resources: defaultResourceSpec,
|
||||
}
|
||||
}
|
||||
if len(obj.ScoringStrategy.Resources) == 0 {
|
||||
// If no resources specified, use the default set.
|
||||
obj.ScoringStrategy.Resources = append(obj.ScoringStrategy.Resources, defaultResourceSpec...)
|
||||
}
|
||||
for i := range obj.ScoringStrategy.Resources {
|
||||
if obj.ScoringStrategy.Resources[i].Weight == 0 {
|
||||
obj.ScoringStrategy.Resources[i].Weight = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
698
pkg/scheduler/apis/config/v1beta3/defaults_test.go
Normal file
698
pkg/scheduler/apis/config/v1beta3/defaults_test.go
Normal file
@@ -0,0 +1,698 @@
|
||||
/*
|
||||
Copyright 2021 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||
"k8s.io/apiserver/pkg/util/feature"
|
||||
componentbaseconfig "k8s.io/component-base/config/v1alpha1"
|
||||
"k8s.io/component-base/featuregate"
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
"k8s.io/kube-scheduler/config/v1beta3"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||
"k8s.io/utils/pointer"
|
||||
)
|
||||
|
||||
var pluginConfigs = []v1beta3.PluginConfig{
|
||||
{
|
||||
Name: "DefaultPreemption",
|
||||
Args: runtime.RawExtension{
|
||||
Object: &v1beta3.DefaultPreemptionArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "DefaultPreemptionArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
MinCandidateNodesPercentage: pointer.Int32Ptr(10),
|
||||
MinCandidateNodesAbsolute: pointer.Int32Ptr(100),
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "InterPodAffinity",
|
||||
Args: runtime.RawExtension{
|
||||
Object: &v1beta3.InterPodAffinityArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "InterPodAffinityArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
HardPodAffinityWeight: pointer.Int32Ptr(1),
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "NodeAffinity",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.NodeAffinityArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "NodeAffinityArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "NodeResourcesBalancedAllocation",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "NodeResourcesBalancedAllocationArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
Resources: []v1beta3.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}},
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "NodeResourcesFit",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.NodeResourcesFitArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "NodeResourcesFitArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
ScoringStrategy: &v1beta3.ScoringStrategy{
|
||||
Type: v1beta3.LeastAllocated,
|
||||
Resources: []v1beta3.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}},
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "PodTopologySpread",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.PodTopologySpreadArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "PodTopologySpreadArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
DefaultingType: v1beta3.SystemDefaulting,
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "VolumeBinding",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.VolumeBindingArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "VolumeBindingArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
BindTimeoutSeconds: pointer.Int64Ptr(600),
|
||||
}},
|
||||
},
|
||||
}
|
||||
|
||||
func TestSchedulerDefaults(t *testing.T) {
|
||||
enable := true
|
||||
tests := []struct {
|
||||
name string
|
||||
config *v1beta3.KubeSchedulerConfiguration
|
||||
expected *v1beta3.KubeSchedulerConfiguration
|
||||
}{
|
||||
{
|
||||
name: "empty config",
|
||||
config: &v1beta3.KubeSchedulerConfiguration{},
|
||||
expected: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(16),
|
||||
DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{
|
||||
EnableProfiling: &enable,
|
||||
EnableContentionProfiling: &enable,
|
||||
},
|
||||
LeaderElection: componentbaseconfig.LeaderElectionConfiguration{
|
||||
LeaderElect: pointer.BoolPtr(true),
|
||||
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
|
||||
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
|
||||
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
|
||||
ResourceLock: "leases",
|
||||
ResourceNamespace: "kube-system",
|
||||
ResourceName: "kube-scheduler",
|
||||
},
|
||||
ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
|
||||
QPS: 50,
|
||||
Burst: 100,
|
||||
ContentType: "application/vnd.kubernetes.protobuf",
|
||||
},
|
||||
PercentageOfNodesToScore: pointer.Int32Ptr(0),
|
||||
PodInitialBackoffSeconds: pointer.Int64Ptr(1),
|
||||
PodMaxBackoffSeconds: pointer.Int64Ptr(10),
|
||||
Profiles: []v1beta3.KubeSchedulerProfile{
|
||||
{
|
||||
Plugins: getDefaultPlugins(),
|
||||
PluginConfig: pluginConfigs,
|
||||
SchedulerName: pointer.StringPtr("default-scheduler"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "no scheduler name",
|
||||
config: &v1beta3.KubeSchedulerConfiguration{
|
||||
Profiles: []v1beta3.KubeSchedulerProfile{{}},
|
||||
},
|
||||
expected: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(16),
|
||||
DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{
|
||||
EnableProfiling: &enable,
|
||||
EnableContentionProfiling: &enable,
|
||||
},
|
||||
LeaderElection: componentbaseconfig.LeaderElectionConfiguration{
|
||||
LeaderElect: pointer.BoolPtr(true),
|
||||
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
|
||||
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
|
||||
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
|
||||
ResourceLock: "leases",
|
||||
ResourceNamespace: "kube-system",
|
||||
ResourceName: "kube-scheduler",
|
||||
},
|
||||
ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
|
||||
QPS: 50,
|
||||
Burst: 100,
|
||||
ContentType: "application/vnd.kubernetes.protobuf",
|
||||
},
|
||||
PercentageOfNodesToScore: pointer.Int32Ptr(0),
|
||||
PodInitialBackoffSeconds: pointer.Int64Ptr(1),
|
||||
PodMaxBackoffSeconds: pointer.Int64Ptr(10),
|
||||
Profiles: []v1beta3.KubeSchedulerProfile{
|
||||
{
|
||||
SchedulerName: pointer.StringPtr("default-scheduler"),
|
||||
Plugins: getDefaultPlugins(),
|
||||
PluginConfig: pluginConfigs},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "two profiles",
|
||||
config: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(16),
|
||||
Profiles: []v1beta3.KubeSchedulerProfile{
|
||||
{
|
||||
PluginConfig: []v1beta3.PluginConfig{
|
||||
{Name: "FooPlugin"},
|
||||
},
|
||||
},
|
||||
{
|
||||
SchedulerName: pointer.StringPtr("custom-scheduler"),
|
||||
Plugins: &v1beta3.Plugins{
|
||||
Bind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "BarPlugin"},
|
||||
},
|
||||
Disabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultBinder},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
expected: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(16),
|
||||
DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{
|
||||
EnableProfiling: &enable,
|
||||
EnableContentionProfiling: &enable,
|
||||
},
|
||||
LeaderElection: componentbaseconfig.LeaderElectionConfiguration{
|
||||
LeaderElect: pointer.BoolPtr(true),
|
||||
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
|
||||
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
|
||||
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
|
||||
ResourceLock: "leases",
|
||||
ResourceNamespace: "kube-system",
|
||||
ResourceName: "kube-scheduler",
|
||||
},
|
||||
ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
|
||||
QPS: 50,
|
||||
Burst: 100,
|
||||
ContentType: "application/vnd.kubernetes.protobuf",
|
||||
},
|
||||
PercentageOfNodesToScore: pointer.Int32Ptr(0),
|
||||
PodInitialBackoffSeconds: pointer.Int64Ptr(1),
|
||||
PodMaxBackoffSeconds: pointer.Int64Ptr(10),
|
||||
Profiles: []v1beta3.KubeSchedulerProfile{
|
||||
{
|
||||
Plugins: getDefaultPlugins(),
|
||||
PluginConfig: []v1beta3.PluginConfig{
|
||||
{Name: "FooPlugin"},
|
||||
{
|
||||
Name: "DefaultPreemption",
|
||||
Args: runtime.RawExtension{
|
||||
Object: &v1beta3.DefaultPreemptionArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "DefaultPreemptionArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
MinCandidateNodesPercentage: pointer.Int32Ptr(10),
|
||||
MinCandidateNodesAbsolute: pointer.Int32Ptr(100),
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "InterPodAffinity",
|
||||
Args: runtime.RawExtension{
|
||||
Object: &v1beta3.InterPodAffinityArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "InterPodAffinityArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
HardPodAffinityWeight: pointer.Int32Ptr(1),
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "NodeAffinity",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.NodeAffinityArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "NodeAffinityArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "NodeResourcesBalancedAllocation",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "NodeResourcesBalancedAllocationArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
Resources: []v1beta3.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}},
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "NodeResourcesFit",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.NodeResourcesFitArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "NodeResourcesFitArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
ScoringStrategy: &v1beta3.ScoringStrategy{
|
||||
Type: v1beta3.LeastAllocated,
|
||||
Resources: []v1beta3.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}},
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "PodTopologySpread",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.PodTopologySpreadArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "PodTopologySpreadArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
DefaultingType: v1beta3.SystemDefaulting,
|
||||
}},
|
||||
},
|
||||
{
|
||||
Name: "VolumeBinding",
|
||||
Args: runtime.RawExtension{Object: &v1beta3.VolumeBindingArgs{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "VolumeBindingArgs",
|
||||
APIVersion: "kubescheduler.config.k8s.io/v1beta3",
|
||||
},
|
||||
BindTimeoutSeconds: pointer.Int64Ptr(600),
|
||||
}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
SchedulerName: pointer.StringPtr("custom-scheduler"),
|
||||
Plugins: &v1beta3.Plugins{
|
||||
QueueSort: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.PrioritySort},
|
||||
},
|
||||
},
|
||||
PreFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.NodeAffinity},
|
||||
},
|
||||
},
|
||||
Filter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeUnschedulable},
|
||||
{Name: names.NodeName},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
{Name: names.NodePorts},
|
||||
{Name: names.NodeResourcesFit},
|
||||
{Name: names.VolumeRestrictions},
|
||||
{Name: names.EBSLimits},
|
||||
{Name: names.GCEPDLimits},
|
||||
{Name: names.NodeVolumeLimits},
|
||||
{Name: names.AzureDiskLimits},
|
||||
{Name: names.VolumeBinding},
|
||||
{Name: names.VolumeZone},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.InterPodAffinity},
|
||||
},
|
||||
},
|
||||
PostFilter: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.DefaultPreemption},
|
||||
},
|
||||
},
|
||||
PreScore: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.InterPodAffinity},
|
||||
{Name: names.PodTopologySpread},
|
||||
{Name: names.TaintToleration},
|
||||
{Name: names.NodeAffinity},
|
||||
},
|
||||
},
|
||||
Score: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.NodeResourcesFit, Weight: pointer.Int32Ptr(1)},
|
||||
{Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.NodeAffinity, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)},
|
||||
{Name: names.TaintToleration, Weight: pointer.Int32Ptr(3)},
|
||||
},
|
||||
},
|
||||
Reserve: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
PreBind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: names.VolumeBinding},
|
||||
},
|
||||
},
|
||||
Bind: v1beta3.PluginSet{
|
||||
Enabled: []v1beta3.Plugin{
|
||||
{Name: "BarPlugin"},
|
||||
},
|
||||
},
|
||||
},
|
||||
PluginConfig: pluginConfigs,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Prallelism with no port",
|
||||
config: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(16),
|
||||
},
|
||||
expected: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(16),
|
||||
DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{
|
||||
EnableProfiling: &enable,
|
||||
EnableContentionProfiling: &enable,
|
||||
},
|
||||
LeaderElection: componentbaseconfig.LeaderElectionConfiguration{
|
||||
LeaderElect: pointer.BoolPtr(true),
|
||||
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
|
||||
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
|
||||
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
|
||||
ResourceLock: "leases",
|
||||
ResourceNamespace: "kube-system",
|
||||
ResourceName: "kube-scheduler",
|
||||
},
|
||||
ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
|
||||
QPS: 50,
|
||||
Burst: 100,
|
||||
ContentType: "application/vnd.kubernetes.protobuf",
|
||||
},
|
||||
PercentageOfNodesToScore: pointer.Int32Ptr(0),
|
||||
PodInitialBackoffSeconds: pointer.Int64Ptr(1),
|
||||
PodMaxBackoffSeconds: pointer.Int64Ptr(10),
|
||||
Profiles: []v1beta3.KubeSchedulerProfile{
|
||||
{
|
||||
Plugins: getDefaultPlugins(),
|
||||
PluginConfig: pluginConfigs,
|
||||
SchedulerName: pointer.StringPtr("default-scheduler"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set non default parallelism",
|
||||
config: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(8),
|
||||
},
|
||||
expected: &v1beta3.KubeSchedulerConfiguration{
|
||||
Parallelism: pointer.Int32Ptr(8),
|
||||
DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{
|
||||
EnableProfiling: &enable,
|
||||
EnableContentionProfiling: &enable,
|
||||
},
|
||||
LeaderElection: componentbaseconfig.LeaderElectionConfiguration{
|
||||
LeaderElect: pointer.BoolPtr(true),
|
||||
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
|
||||
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
|
||||
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
|
||||
ResourceLock: "leases",
|
||||
ResourceNamespace: "kube-system",
|
||||
ResourceName: "kube-scheduler",
|
||||
},
|
||||
ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
|
||||
QPS: 50,
|
||||
Burst: 100,
|
||||
ContentType: "application/vnd.kubernetes.protobuf",
|
||||
},
|
||||
PercentageOfNodesToScore: pointer.Int32Ptr(0),
|
||||
PodInitialBackoffSeconds: pointer.Int64Ptr(1),
|
||||
PodMaxBackoffSeconds: pointer.Int64Ptr(10),
|
||||
Profiles: []v1beta3.KubeSchedulerProfile{
|
||||
{
|
||||
Plugins: getDefaultPlugins(),
|
||||
PluginConfig: pluginConfigs,
|
||||
SchedulerName: pointer.StringPtr("default-scheduler"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
SetDefaults_KubeSchedulerConfiguration(tc.config)
|
||||
if diff := cmp.Diff(tc.expected, tc.config); diff != "" {
|
||||
t.Errorf("Got unexpected defaults (-want, +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPluginArgsDefaults(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
features map[featuregate.Feature]bool
|
||||
in runtime.Object
|
||||
want runtime.Object
|
||||
}{
|
||||
{
|
||||
name: "DefaultPreemptionArgs empty",
|
||||
in: &v1beta3.DefaultPreemptionArgs{},
|
||||
want: &v1beta3.DefaultPreemptionArgs{
|
||||
MinCandidateNodesPercentage: pointer.Int32Ptr(10),
|
||||
MinCandidateNodesAbsolute: pointer.Int32Ptr(100),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "DefaultPreemptionArgs with value",
|
||||
in: &v1beta3.DefaultPreemptionArgs{
|
||||
MinCandidateNodesPercentage: pointer.Int32Ptr(50),
|
||||
},
|
||||
want: &v1beta3.DefaultPreemptionArgs{
|
||||
MinCandidateNodesPercentage: pointer.Int32Ptr(50),
|
||||
MinCandidateNodesAbsolute: pointer.Int32Ptr(100),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "InterPodAffinityArgs empty",
|
||||
in: &v1beta3.InterPodAffinityArgs{},
|
||||
want: &v1beta3.InterPodAffinityArgs{
|
||||
HardPodAffinityWeight: pointer.Int32Ptr(1),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "InterPodAffinityArgs explicit 0",
|
||||
in: &v1beta3.InterPodAffinityArgs{
|
||||
HardPodAffinityWeight: pointer.Int32Ptr(0),
|
||||
},
|
||||
want: &v1beta3.InterPodAffinityArgs{
|
||||
HardPodAffinityWeight: pointer.Int32Ptr(0),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "InterPodAffinityArgs with value",
|
||||
in: &v1beta3.InterPodAffinityArgs{
|
||||
HardPodAffinityWeight: pointer.Int32Ptr(5),
|
||||
},
|
||||
want: &v1beta3.InterPodAffinityArgs{
|
||||
HardPodAffinityWeight: pointer.Int32Ptr(5),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NodeResourcesBalancedAllocationArgs resources empty",
|
||||
in: &v1beta3.NodeResourcesBalancedAllocationArgs{},
|
||||
want: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
Resources: []v1beta3.ResourceSpec{
|
||||
{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NodeResourcesBalancedAllocationArgs with scalar resource",
|
||||
in: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
Resources: []v1beta3.ResourceSpec{
|
||||
{Name: "scalar.io/scalar1", Weight: 1},
|
||||
},
|
||||
},
|
||||
want: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
Resources: []v1beta3.ResourceSpec{
|
||||
{Name: "scalar.io/scalar1", Weight: 1},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NodeResourcesBalancedAllocationArgs with mixed resources",
|
||||
in: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
Resources: []v1beta3.ResourceSpec{
|
||||
{Name: string(v1.ResourceCPU), Weight: 1},
|
||||
{Name: "scalar.io/scalar1", Weight: 1},
|
||||
},
|
||||
},
|
||||
want: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
Resources: []v1beta3.ResourceSpec{
|
||||
{Name: string(v1.ResourceCPU), Weight: 1},
|
||||
{Name: "scalar.io/scalar1", Weight: 1},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NodeResourcesBalancedAllocationArgs have resource no weight",
|
||||
in: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
Resources: []v1beta3.ResourceSpec{
|
||||
{Name: string(v1.ResourceCPU)},
|
||||
{Name: "scalar.io/scalar0"},
|
||||
{Name: "scalar.io/scalar1", Weight: 1},
|
||||
},
|
||||
},
|
||||
want: &v1beta3.NodeResourcesBalancedAllocationArgs{
|
||||
Resources: []v1beta3.ResourceSpec{
|
||||
{Name: string(v1.ResourceCPU), Weight: 1},
|
||||
{Name: "scalar.io/scalar0", Weight: 1},
|
||||
{Name: "scalar.io/scalar1", Weight: 1},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "PodTopologySpreadArgs resources empty",
|
||||
in: &v1beta3.PodTopologySpreadArgs{},
|
||||
want: &v1beta3.PodTopologySpreadArgs{
|
||||
DefaultingType: v1beta3.SystemDefaulting,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "PodTopologySpreadArgs resources with value",
|
||||
in: &v1beta3.PodTopologySpreadArgs{
|
||||
DefaultConstraints: []v1.TopologySpreadConstraint{
|
||||
{
|
||||
TopologyKey: "planet",
|
||||
WhenUnsatisfiable: v1.DoNotSchedule,
|
||||
MaxSkew: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
want: &v1beta3.PodTopologySpreadArgs{
|
||||
DefaultConstraints: []v1.TopologySpreadConstraint{
|
||||
{
|
||||
TopologyKey: "planet",
|
||||
WhenUnsatisfiable: v1.DoNotSchedule,
|
||||
MaxSkew: 2,
|
||||
},
|
||||
},
|
||||
DefaultingType: v1beta3.SystemDefaulting,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "PodTopologySpreadArgs empty, DefaultPodTopologySpread feature disabled",
|
||||
features: map[featuregate.Feature]bool{
|
||||
features.DefaultPodTopologySpread: false,
|
||||
},
|
||||
in: &v1beta3.PodTopologySpreadArgs{},
|
||||
want: &v1beta3.PodTopologySpreadArgs{
|
||||
DefaultingType: v1beta3.ListDefaulting,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NodeResourcesFitArgs not set",
|
||||
in: &v1beta3.NodeResourcesFitArgs{},
|
||||
want: &v1beta3.NodeResourcesFitArgs{
|
||||
ScoringStrategy: &v1beta3.ScoringStrategy{
|
||||
Type: v1beta3.LeastAllocated,
|
||||
Resources: defaultResourceSpec,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NodeResourcesFitArgs Resources empty",
|
||||
in: &v1beta3.NodeResourcesFitArgs{
|
||||
ScoringStrategy: &v1beta3.ScoringStrategy{
|
||||
Type: v1beta3.MostAllocated,
|
||||
},
|
||||
},
|
||||
want: &v1beta3.NodeResourcesFitArgs{
|
||||
ScoringStrategy: &v1beta3.ScoringStrategy{
|
||||
Type: v1beta3.MostAllocated,
|
||||
Resources: defaultResourceSpec,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "VolumeBindingArgs empty, VolumeCapacityPriority disabled",
|
||||
features: map[featuregate.Feature]bool{
|
||||
features.VolumeCapacityPriority: false,
|
||||
},
|
||||
in: &v1beta3.VolumeBindingArgs{},
|
||||
want: &v1beta3.VolumeBindingArgs{
|
||||
BindTimeoutSeconds: pointer.Int64Ptr(600),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "VolumeBindingArgs empty, VolumeCapacityPriority enabled",
|
||||
features: map[featuregate.Feature]bool{
|
||||
features.VolumeCapacityPriority: true,
|
||||
},
|
||||
in: &v1beta3.VolumeBindingArgs{},
|
||||
want: &v1beta3.VolumeBindingArgs{
|
||||
BindTimeoutSeconds: pointer.Int64Ptr(600),
|
||||
Shape: []v1beta3.UtilizationShapePoint{
|
||||
{Utilization: 0, Score: 0},
|
||||
{Utilization: 100, Score: 10},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
scheme := runtime.NewScheme()
|
||||
utilruntime.Must(AddToScheme(scheme))
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
for k, v := range tc.features {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, k, v)()
|
||||
}
|
||||
scheme.Default(tc.in)
|
||||
if diff := cmp.Diff(tc.in, tc.want); diff != "" {
|
||||
t.Errorf("Got unexpected defaults (-want, +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
24
pkg/scheduler/apis/config/v1beta3/doc.go
Normal file
24
pkg/scheduler/apis/config/v1beta3/doc.go
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
Copyright 2021 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// +k8s:deepcopy-gen=package
|
||||
// +k8s:conversion-gen=k8s.io/kubernetes/pkg/scheduler/apis/config
|
||||
// +k8s:conversion-gen-external-types=k8s.io/kube-scheduler/config/v1beta3
|
||||
// +k8s:defaulter-gen=TypeMeta
|
||||
// +k8s:defaulter-gen-input=k8s.io/kube-scheduler/config/v1beta3
|
||||
// +groupName=kubescheduler.config.k8s.io
|
||||
|
||||
package v1beta3 // import "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3"
|
||||
42
pkg/scheduler/apis/config/v1beta3/register.go
Normal file
42
pkg/scheduler/apis/config/v1beta3/register.go
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright 2021 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
"k8s.io/kube-scheduler/config/v1beta3"
|
||||
)
|
||||
|
||||
// GroupName is the group name used in this package
|
||||
const GroupName = v1beta3.GroupName
|
||||
|
||||
// SchemeGroupVersion is group version used to register these objects
|
||||
var SchemeGroupVersion = v1beta3.SchemeGroupVersion
|
||||
|
||||
var (
|
||||
// localSchemeBuilder extends the SchemeBuilder instance with the external types. In this package,
|
||||
// defaulting and conversion init funcs are registered as well.
|
||||
localSchemeBuilder = &v1beta3.SchemeBuilder
|
||||
// AddToScheme is a global function that registers this API group & version to a scheme
|
||||
AddToScheme = localSchemeBuilder.AddToScheme
|
||||
)
|
||||
|
||||
func init() {
|
||||
// We only register manually written functions here. The registration of the
|
||||
// generated functions takes place in the generated files. The separation
|
||||
// makes the code compile even when the generated files are missing.
|
||||
localSchemeBuilder.Register(addDefaultingFuncs)
|
||||
}
|
||||
859
pkg/scheduler/apis/config/v1beta3/zz_generated.conversion.go
generated
Normal file
859
pkg/scheduler/apis/config/v1beta3/zz_generated.conversion.go
generated
Normal file
@@ -0,0 +1,859 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
Copyright The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by conversion-gen. DO NOT EDIT.
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
unsafe "unsafe"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
v1alpha1 "k8s.io/component-base/config/v1alpha1"
|
||||
configv1 "k8s.io/kube-scheduler/config/v1"
|
||||
v1beta3 "k8s.io/kube-scheduler/config/v1beta3"
|
||||
config "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||
)
|
||||
|
||||
func init() {
|
||||
localSchemeBuilder.Register(RegisterConversions)
|
||||
}
|
||||
|
||||
// RegisterConversions adds conversion functions to the given scheme.
|
||||
// Public to allow building arbitrary schemes.
|
||||
func RegisterConversions(s *runtime.Scheme) error {
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.DefaultPreemptionArgs)(nil), (*config.DefaultPreemptionArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(a.(*v1beta3.DefaultPreemptionArgs), b.(*config.DefaultPreemptionArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.DefaultPreemptionArgs)(nil), (*v1beta3.DefaultPreemptionArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(a.(*config.DefaultPreemptionArgs), b.(*v1beta3.DefaultPreemptionArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.Extender)(nil), (*config.Extender)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_Extender_To_config_Extender(a.(*v1beta3.Extender), b.(*config.Extender), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.Extender)(nil), (*v1beta3.Extender)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_Extender_To_v1beta3_Extender(a.(*config.Extender), b.(*v1beta3.Extender), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.InterPodAffinityArgs)(nil), (*config.InterPodAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(a.(*v1beta3.InterPodAffinityArgs), b.(*config.InterPodAffinityArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.InterPodAffinityArgs)(nil), (*v1beta3.InterPodAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(a.(*config.InterPodAffinityArgs), b.(*v1beta3.InterPodAffinityArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.KubeSchedulerProfile)(nil), (*config.KubeSchedulerProfile)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(a.(*v1beta3.KubeSchedulerProfile), b.(*config.KubeSchedulerProfile), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.KubeSchedulerProfile)(nil), (*v1beta3.KubeSchedulerProfile)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(a.(*config.KubeSchedulerProfile), b.(*v1beta3.KubeSchedulerProfile), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.NodeAffinityArgs)(nil), (*config.NodeAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(a.(*v1beta3.NodeAffinityArgs), b.(*config.NodeAffinityArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.NodeAffinityArgs)(nil), (*v1beta3.NodeAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(a.(*config.NodeAffinityArgs), b.(*v1beta3.NodeAffinityArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.NodeResourcesBalancedAllocationArgs)(nil), (*config.NodeResourcesBalancedAllocationArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(a.(*v1beta3.NodeResourcesBalancedAllocationArgs), b.(*config.NodeResourcesBalancedAllocationArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.NodeResourcesBalancedAllocationArgs)(nil), (*v1beta3.NodeResourcesBalancedAllocationArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(a.(*config.NodeResourcesBalancedAllocationArgs), b.(*v1beta3.NodeResourcesBalancedAllocationArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.NodeResourcesFitArgs)(nil), (*config.NodeResourcesFitArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(a.(*v1beta3.NodeResourcesFitArgs), b.(*config.NodeResourcesFitArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.NodeResourcesFitArgs)(nil), (*v1beta3.NodeResourcesFitArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(a.(*config.NodeResourcesFitArgs), b.(*v1beta3.NodeResourcesFitArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.Plugin)(nil), (*config.Plugin)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_Plugin_To_config_Plugin(a.(*v1beta3.Plugin), b.(*config.Plugin), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.Plugin)(nil), (*v1beta3.Plugin)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_Plugin_To_v1beta3_Plugin(a.(*config.Plugin), b.(*v1beta3.Plugin), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.PluginConfig)(nil), (*config.PluginConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_PluginConfig_To_config_PluginConfig(a.(*v1beta3.PluginConfig), b.(*config.PluginConfig), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.PluginConfig)(nil), (*v1beta3.PluginConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_PluginConfig_To_v1beta3_PluginConfig(a.(*config.PluginConfig), b.(*v1beta3.PluginConfig), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.PluginSet)(nil), (*config.PluginSet)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_PluginSet_To_config_PluginSet(a.(*v1beta3.PluginSet), b.(*config.PluginSet), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.PluginSet)(nil), (*v1beta3.PluginSet)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_PluginSet_To_v1beta3_PluginSet(a.(*config.PluginSet), b.(*v1beta3.PluginSet), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.Plugins)(nil), (*config.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_Plugins_To_config_Plugins(a.(*v1beta3.Plugins), b.(*config.Plugins), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.Plugins)(nil), (*v1beta3.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_Plugins_To_v1beta3_Plugins(a.(*config.Plugins), b.(*v1beta3.Plugins), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.PodTopologySpreadArgs)(nil), (*config.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(a.(*v1beta3.PodTopologySpreadArgs), b.(*config.PodTopologySpreadArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.PodTopologySpreadArgs)(nil), (*v1beta3.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(a.(*config.PodTopologySpreadArgs), b.(*v1beta3.PodTopologySpreadArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.RequestedToCapacityRatioParam)(nil), (*config.RequestedToCapacityRatioParam)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(a.(*v1beta3.RequestedToCapacityRatioParam), b.(*config.RequestedToCapacityRatioParam), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.RequestedToCapacityRatioParam)(nil), (*v1beta3.RequestedToCapacityRatioParam)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(a.(*config.RequestedToCapacityRatioParam), b.(*v1beta3.RequestedToCapacityRatioParam), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.ResourceSpec)(nil), (*config.ResourceSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_ResourceSpec_To_config_ResourceSpec(a.(*v1beta3.ResourceSpec), b.(*config.ResourceSpec), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.ResourceSpec)(nil), (*v1beta3.ResourceSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_ResourceSpec_To_v1beta3_ResourceSpec(a.(*config.ResourceSpec), b.(*v1beta3.ResourceSpec), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.ScoringStrategy)(nil), (*config.ScoringStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(a.(*v1beta3.ScoringStrategy), b.(*config.ScoringStrategy), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.ScoringStrategy)(nil), (*v1beta3.ScoringStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(a.(*config.ScoringStrategy), b.(*v1beta3.ScoringStrategy), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.UtilizationShapePoint)(nil), (*config.UtilizationShapePoint)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(a.(*v1beta3.UtilizationShapePoint), b.(*config.UtilizationShapePoint), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.UtilizationShapePoint)(nil), (*v1beta3.UtilizationShapePoint)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(a.(*config.UtilizationShapePoint), b.(*v1beta3.UtilizationShapePoint), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1beta3.VolumeBindingArgs)(nil), (*config.VolumeBindingArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(a.(*v1beta3.VolumeBindingArgs), b.(*config.VolumeBindingArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*config.VolumeBindingArgs)(nil), (*v1beta3.VolumeBindingArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(a.(*config.VolumeBindingArgs), b.(*v1beta3.VolumeBindingArgs), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddConversionFunc((*config.KubeSchedulerConfiguration)(nil), (*v1beta3.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(a.(*config.KubeSchedulerConfiguration), b.(*v1beta3.KubeSchedulerConfiguration), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddConversionFunc((*v1beta3.KubeSchedulerConfiguration)(nil), (*config.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(a.(*v1beta3.KubeSchedulerConfiguration), b.(*config.KubeSchedulerConfiguration), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in *v1beta3.DefaultPreemptionArgs, out *config.DefaultPreemptionArgs, s conversion.Scope) error {
|
||||
if err := v1.Convert_Pointer_int32_To_int32(&in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_Pointer_int32_To_int32(&in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs is an autogenerated conversion function.
|
||||
func Convert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in *v1beta3.DefaultPreemptionArgs, out *config.DefaultPreemptionArgs, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(in *config.DefaultPreemptionArgs, out *v1beta3.DefaultPreemptionArgs, s conversion.Scope) error {
|
||||
if err := v1.Convert_int32_To_Pointer_int32(&in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_int32_To_Pointer_int32(&in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs is an autogenerated conversion function.
|
||||
func Convert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(in *config.DefaultPreemptionArgs, out *v1beta3.DefaultPreemptionArgs, s conversion.Scope) error {
|
||||
return autoConvert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_Extender_To_config_Extender(in *v1beta3.Extender, out *config.Extender, s conversion.Scope) error {
|
||||
out.URLPrefix = in.URLPrefix
|
||||
out.FilterVerb = in.FilterVerb
|
||||
out.PreemptVerb = in.PreemptVerb
|
||||
out.PrioritizeVerb = in.PrioritizeVerb
|
||||
out.Weight = in.Weight
|
||||
out.BindVerb = in.BindVerb
|
||||
out.EnableHTTPS = in.EnableHTTPS
|
||||
out.TLSConfig = (*config.ExtenderTLSConfig)(unsafe.Pointer(in.TLSConfig))
|
||||
out.HTTPTimeout = in.HTTPTimeout
|
||||
out.NodeCacheCapable = in.NodeCacheCapable
|
||||
out.ManagedResources = *(*[]config.ExtenderManagedResource)(unsafe.Pointer(&in.ManagedResources))
|
||||
out.Ignorable = in.Ignorable
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_Extender_To_config_Extender is an autogenerated conversion function.
|
||||
func Convert_v1beta3_Extender_To_config_Extender(in *v1beta3.Extender, out *config.Extender, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_Extender_To_config_Extender(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_Extender_To_v1beta3_Extender(in *config.Extender, out *v1beta3.Extender, s conversion.Scope) error {
|
||||
out.URLPrefix = in.URLPrefix
|
||||
out.FilterVerb = in.FilterVerb
|
||||
out.PreemptVerb = in.PreemptVerb
|
||||
out.PrioritizeVerb = in.PrioritizeVerb
|
||||
out.Weight = in.Weight
|
||||
out.BindVerb = in.BindVerb
|
||||
out.EnableHTTPS = in.EnableHTTPS
|
||||
out.TLSConfig = (*configv1.ExtenderTLSConfig)(unsafe.Pointer(in.TLSConfig))
|
||||
out.HTTPTimeout = in.HTTPTimeout
|
||||
out.NodeCacheCapable = in.NodeCacheCapable
|
||||
out.ManagedResources = *(*[]configv1.ExtenderManagedResource)(unsafe.Pointer(&in.ManagedResources))
|
||||
out.Ignorable = in.Ignorable
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_Extender_To_v1beta3_Extender is an autogenerated conversion function.
|
||||
func Convert_config_Extender_To_v1beta3_Extender(in *config.Extender, out *v1beta3.Extender, s conversion.Scope) error {
|
||||
return autoConvert_config_Extender_To_v1beta3_Extender(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in *v1beta3.InterPodAffinityArgs, out *config.InterPodAffinityArgs, s conversion.Scope) error {
|
||||
if err := v1.Convert_Pointer_int32_To_int32(&in.HardPodAffinityWeight, &out.HardPodAffinityWeight, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs is an autogenerated conversion function.
|
||||
func Convert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in *v1beta3.InterPodAffinityArgs, out *config.InterPodAffinityArgs, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(in *config.InterPodAffinityArgs, out *v1beta3.InterPodAffinityArgs, s conversion.Scope) error {
|
||||
if err := v1.Convert_int32_To_Pointer_int32(&in.HardPodAffinityWeight, &out.HardPodAffinityWeight, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs is an autogenerated conversion function.
|
||||
func Convert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(in *config.InterPodAffinityArgs, out *v1beta3.InterPodAffinityArgs, s conversion.Scope) error {
|
||||
return autoConvert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in *v1beta3.KubeSchedulerConfiguration, out *config.KubeSchedulerConfiguration, s conversion.Scope) error {
|
||||
if err := v1.Convert_Pointer_int32_To_int32(&in.Parallelism, &out.Parallelism, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1alpha1.Convert_v1alpha1_LeaderElectionConfiguration_To_config_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1alpha1.Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1alpha1.Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_Pointer_int32_To_int32(&in.PercentageOfNodesToScore, &out.PercentageOfNodesToScore, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_Pointer_int64_To_int64(&in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_Pointer_int64_To_int64(&in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if in.Profiles != nil {
|
||||
in, out := &in.Profiles, &out.Profiles
|
||||
*out = make([]config.KubeSchedulerProfile, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.Profiles = nil
|
||||
}
|
||||
out.Extenders = *(*[]config.Extender)(unsafe.Pointer(&in.Extenders))
|
||||
return nil
|
||||
}
|
||||
|
||||
func autoConvert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(in *config.KubeSchedulerConfiguration, out *v1beta3.KubeSchedulerConfiguration, s conversion.Scope) error {
|
||||
if err := v1.Convert_int32_To_Pointer_int32(&in.Parallelism, &out.Parallelism, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1alpha1.Convert_config_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1alpha1.Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil {
|
||||
return err
|
||||
}
|
||||
// WARNING: in.HealthzBindAddress requires manual conversion: does not exist in peer-type
|
||||
// WARNING: in.MetricsBindAddress requires manual conversion: does not exist in peer-type
|
||||
if err := v1alpha1.Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_int32_To_Pointer_int32(&in.PercentageOfNodesToScore, &out.PercentageOfNodesToScore, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_int64_To_Pointer_int64(&in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := v1.Convert_int64_To_Pointer_int64(&in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if in.Profiles != nil {
|
||||
in, out := &in.Profiles, &out.Profiles
|
||||
*out = make([]v1beta3.KubeSchedulerProfile, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.Profiles = nil
|
||||
}
|
||||
out.Extenders = *(*[]v1beta3.Extender)(unsafe.Pointer(&in.Extenders))
|
||||
return nil
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in *v1beta3.KubeSchedulerProfile, out *config.KubeSchedulerProfile, s conversion.Scope) error {
|
||||
if err := v1.Convert_Pointer_string_To_string(&in.SchedulerName, &out.SchedulerName, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if in.Plugins != nil {
|
||||
in, out := &in.Plugins, &out.Plugins
|
||||
*out = new(config.Plugins)
|
||||
if err := Convert_v1beta3_Plugins_To_config_Plugins(*in, *out, s); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
out.Plugins = nil
|
||||
}
|
||||
if in.PluginConfig != nil {
|
||||
in, out := &in.PluginConfig, &out.PluginConfig
|
||||
*out = make([]config.PluginConfig, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_v1beta3_PluginConfig_To_config_PluginConfig(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.PluginConfig = nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile is an autogenerated conversion function.
|
||||
func Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in *v1beta3.KubeSchedulerProfile, out *config.KubeSchedulerProfile, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta3.KubeSchedulerProfile, s conversion.Scope) error {
|
||||
if err := v1.Convert_string_To_Pointer_string(&in.SchedulerName, &out.SchedulerName, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if in.Plugins != nil {
|
||||
in, out := &in.Plugins, &out.Plugins
|
||||
*out = new(v1beta3.Plugins)
|
||||
if err := Convert_config_Plugins_To_v1beta3_Plugins(*in, *out, s); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
out.Plugins = nil
|
||||
}
|
||||
if in.PluginConfig != nil {
|
||||
in, out := &in.PluginConfig, &out.PluginConfig
|
||||
*out = make([]v1beta3.PluginConfig, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_config_PluginConfig_To_v1beta3_PluginConfig(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.PluginConfig = nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile is an autogenerated conversion function.
|
||||
func Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta3.KubeSchedulerProfile, s conversion.Scope) error {
|
||||
return autoConvert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(in *v1beta3.NodeAffinityArgs, out *config.NodeAffinityArgs, s conversion.Scope) error {
|
||||
out.AddedAffinity = (*corev1.NodeAffinity)(unsafe.Pointer(in.AddedAffinity))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs is an autogenerated conversion function.
|
||||
func Convert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(in *v1beta3.NodeAffinityArgs, out *config.NodeAffinityArgs, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(in *config.NodeAffinityArgs, out *v1beta3.NodeAffinityArgs, s conversion.Scope) error {
|
||||
out.AddedAffinity = (*corev1.NodeAffinity)(unsafe.Pointer(in.AddedAffinity))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs is an autogenerated conversion function.
|
||||
func Convert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(in *config.NodeAffinityArgs, out *v1beta3.NodeAffinityArgs, s conversion.Scope) error {
|
||||
return autoConvert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in *v1beta3.NodeResourcesBalancedAllocationArgs, out *config.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error {
|
||||
out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs is an autogenerated conversion function.
|
||||
func Convert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in *v1beta3.NodeResourcesBalancedAllocationArgs, out *config.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(in *config.NodeResourcesBalancedAllocationArgs, out *v1beta3.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error {
|
||||
out.Resources = *(*[]v1beta3.ResourceSpec)(unsafe.Pointer(&in.Resources))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs is an autogenerated conversion function.
|
||||
func Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(in *config.NodeResourcesBalancedAllocationArgs, out *v1beta3.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error {
|
||||
return autoConvert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in *v1beta3.NodeResourcesFitArgs, out *config.NodeResourcesFitArgs, s conversion.Scope) error {
|
||||
out.IgnoredResources = *(*[]string)(unsafe.Pointer(&in.IgnoredResources))
|
||||
out.IgnoredResourceGroups = *(*[]string)(unsafe.Pointer(&in.IgnoredResourceGroups))
|
||||
out.ScoringStrategy = (*config.ScoringStrategy)(unsafe.Pointer(in.ScoringStrategy))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs is an autogenerated conversion function.
|
||||
func Convert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in *v1beta3.NodeResourcesFitArgs, out *config.NodeResourcesFitArgs, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(in *config.NodeResourcesFitArgs, out *v1beta3.NodeResourcesFitArgs, s conversion.Scope) error {
|
||||
out.IgnoredResources = *(*[]string)(unsafe.Pointer(&in.IgnoredResources))
|
||||
out.IgnoredResourceGroups = *(*[]string)(unsafe.Pointer(&in.IgnoredResourceGroups))
|
||||
out.ScoringStrategy = (*v1beta3.ScoringStrategy)(unsafe.Pointer(in.ScoringStrategy))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs is an autogenerated conversion function.
|
||||
func Convert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(in *config.NodeResourcesFitArgs, out *v1beta3.NodeResourcesFitArgs, s conversion.Scope) error {
|
||||
return autoConvert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_Plugin_To_config_Plugin(in *v1beta3.Plugin, out *config.Plugin, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
if err := v1.Convert_Pointer_int32_To_int32(&in.Weight, &out.Weight, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_Plugin_To_config_Plugin is an autogenerated conversion function.
|
||||
func Convert_v1beta3_Plugin_To_config_Plugin(in *v1beta3.Plugin, out *config.Plugin, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_Plugin_To_config_Plugin(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_Plugin_To_v1beta3_Plugin(in *config.Plugin, out *v1beta3.Plugin, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
if err := v1.Convert_int32_To_Pointer_int32(&in.Weight, &out.Weight, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_Plugin_To_v1beta3_Plugin is an autogenerated conversion function.
|
||||
func Convert_config_Plugin_To_v1beta3_Plugin(in *config.Plugin, out *v1beta3.Plugin, s conversion.Scope) error {
|
||||
return autoConvert_config_Plugin_To_v1beta3_Plugin(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_PluginConfig_To_config_PluginConfig(in *v1beta3.PluginConfig, out *config.PluginConfig, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
if err := runtime.Convert_runtime_RawExtension_To_runtime_Object(&in.Args, &out.Args, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_PluginConfig_To_config_PluginConfig is an autogenerated conversion function.
|
||||
func Convert_v1beta3_PluginConfig_To_config_PluginConfig(in *v1beta3.PluginConfig, out *config.PluginConfig, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_PluginConfig_To_config_PluginConfig(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_PluginConfig_To_v1beta3_PluginConfig(in *config.PluginConfig, out *v1beta3.PluginConfig, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
if err := runtime.Convert_runtime_Object_To_runtime_RawExtension(&in.Args, &out.Args, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_PluginConfig_To_v1beta3_PluginConfig is an autogenerated conversion function.
|
||||
func Convert_config_PluginConfig_To_v1beta3_PluginConfig(in *config.PluginConfig, out *v1beta3.PluginConfig, s conversion.Scope) error {
|
||||
return autoConvert_config_PluginConfig_To_v1beta3_PluginConfig(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_PluginSet_To_config_PluginSet(in *v1beta3.PluginSet, out *config.PluginSet, s conversion.Scope) error {
|
||||
if in.Enabled != nil {
|
||||
in, out := &in.Enabled, &out.Enabled
|
||||
*out = make([]config.Plugin, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_v1beta3_Plugin_To_config_Plugin(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.Enabled = nil
|
||||
}
|
||||
if in.Disabled != nil {
|
||||
in, out := &in.Disabled, &out.Disabled
|
||||
*out = make([]config.Plugin, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_v1beta3_Plugin_To_config_Plugin(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.Disabled = nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_PluginSet_To_config_PluginSet is an autogenerated conversion function.
|
||||
func Convert_v1beta3_PluginSet_To_config_PluginSet(in *v1beta3.PluginSet, out *config.PluginSet, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_PluginSet_To_config_PluginSet(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_PluginSet_To_v1beta3_PluginSet(in *config.PluginSet, out *v1beta3.PluginSet, s conversion.Scope) error {
|
||||
if in.Enabled != nil {
|
||||
in, out := &in.Enabled, &out.Enabled
|
||||
*out = make([]v1beta3.Plugin, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_config_Plugin_To_v1beta3_Plugin(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.Enabled = nil
|
||||
}
|
||||
if in.Disabled != nil {
|
||||
in, out := &in.Disabled, &out.Disabled
|
||||
*out = make([]v1beta3.Plugin, len(*in))
|
||||
for i := range *in {
|
||||
if err := Convert_config_Plugin_To_v1beta3_Plugin(&(*in)[i], &(*out)[i], s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.Disabled = nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_PluginSet_To_v1beta3_PluginSet is an autogenerated conversion function.
|
||||
func Convert_config_PluginSet_To_v1beta3_PluginSet(in *config.PluginSet, out *v1beta3.PluginSet, s conversion.Scope) error {
|
||||
return autoConvert_config_PluginSet_To_v1beta3_PluginSet(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_Plugins_To_config_Plugins(in *v1beta3.Plugins, out *config.Plugins, s conversion.Scope) error {
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreFilter, &out.PreFilter, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Filter, &out.Filter, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PostFilter, &out.PostFilter, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreScore, &out.PreScore, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Score, &out.Score, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Reserve, &out.Reserve, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Permit, &out.Permit, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreBind, &out.PreBind, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Bind, &out.Bind, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PostBind, &out.PostBind, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_Plugins_To_config_Plugins is an autogenerated conversion function.
|
||||
func Convert_v1beta3_Plugins_To_config_Plugins(in *v1beta3.Plugins, out *config.Plugins, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_Plugins_To_config_Plugins(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error {
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreFilter, &out.PreFilter, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Filter, &out.Filter, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PostFilter, &out.PostFilter, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreScore, &out.PreScore, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Score, &out.Score, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Reserve, &out.Reserve, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Permit, &out.Permit, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreBind, &out.PreBind, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Bind, &out.Bind, s); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PostBind, &out.PostBind, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_Plugins_To_v1beta3_Plugins is an autogenerated conversion function.
|
||||
func Convert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error {
|
||||
return autoConvert_config_Plugins_To_v1beta3_Plugins(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error {
|
||||
out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints))
|
||||
out.DefaultingType = config.PodTopologySpreadConstraintsDefaulting(in.DefaultingType)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs is an autogenerated conversion function.
|
||||
func Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(in *config.PodTopologySpreadArgs, out *v1beta3.PodTopologySpreadArgs, s conversion.Scope) error {
|
||||
out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints))
|
||||
out.DefaultingType = v1beta3.PodTopologySpreadConstraintsDefaulting(in.DefaultingType)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs is an autogenerated conversion function.
|
||||
func Convert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(in *config.PodTopologySpreadArgs, out *v1beta3.PodTopologySpreadArgs, s conversion.Scope) error {
|
||||
return autoConvert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in *v1beta3.RequestedToCapacityRatioParam, out *config.RequestedToCapacityRatioParam, s conversion.Scope) error {
|
||||
out.Shape = *(*[]config.UtilizationShapePoint)(unsafe.Pointer(&in.Shape))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam is an autogenerated conversion function.
|
||||
func Convert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in *v1beta3.RequestedToCapacityRatioParam, out *config.RequestedToCapacityRatioParam, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(in *config.RequestedToCapacityRatioParam, out *v1beta3.RequestedToCapacityRatioParam, s conversion.Scope) error {
|
||||
out.Shape = *(*[]v1beta3.UtilizationShapePoint)(unsafe.Pointer(&in.Shape))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam is an autogenerated conversion function.
|
||||
func Convert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(in *config.RequestedToCapacityRatioParam, out *v1beta3.RequestedToCapacityRatioParam, s conversion.Scope) error {
|
||||
return autoConvert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_ResourceSpec_To_config_ResourceSpec(in *v1beta3.ResourceSpec, out *config.ResourceSpec, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
out.Weight = in.Weight
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_ResourceSpec_To_config_ResourceSpec is an autogenerated conversion function.
|
||||
func Convert_v1beta3_ResourceSpec_To_config_ResourceSpec(in *v1beta3.ResourceSpec, out *config.ResourceSpec, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_ResourceSpec_To_config_ResourceSpec(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_ResourceSpec_To_v1beta3_ResourceSpec(in *config.ResourceSpec, out *v1beta3.ResourceSpec, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
out.Weight = in.Weight
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_ResourceSpec_To_v1beta3_ResourceSpec is an autogenerated conversion function.
|
||||
func Convert_config_ResourceSpec_To_v1beta3_ResourceSpec(in *config.ResourceSpec, out *v1beta3.ResourceSpec, s conversion.Scope) error {
|
||||
return autoConvert_config_ResourceSpec_To_v1beta3_ResourceSpec(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(in *v1beta3.ScoringStrategy, out *config.ScoringStrategy, s conversion.Scope) error {
|
||||
out.Type = config.ScoringStrategyType(in.Type)
|
||||
out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources))
|
||||
out.RequestedToCapacityRatio = (*config.RequestedToCapacityRatioParam)(unsafe.Pointer(in.RequestedToCapacityRatio))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_ScoringStrategy_To_config_ScoringStrategy is an autogenerated conversion function.
|
||||
func Convert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(in *v1beta3.ScoringStrategy, out *config.ScoringStrategy, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(in *config.ScoringStrategy, out *v1beta3.ScoringStrategy, s conversion.Scope) error {
|
||||
out.Type = v1beta3.ScoringStrategyType(in.Type)
|
||||
out.Resources = *(*[]v1beta3.ResourceSpec)(unsafe.Pointer(&in.Resources))
|
||||
out.RequestedToCapacityRatio = (*v1beta3.RequestedToCapacityRatioParam)(unsafe.Pointer(in.RequestedToCapacityRatio))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_ScoringStrategy_To_v1beta3_ScoringStrategy is an autogenerated conversion function.
|
||||
func Convert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(in *config.ScoringStrategy, out *v1beta3.ScoringStrategy, s conversion.Scope) error {
|
||||
return autoConvert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(in *v1beta3.UtilizationShapePoint, out *config.UtilizationShapePoint, s conversion.Scope) error {
|
||||
out.Utilization = in.Utilization
|
||||
out.Score = in.Score
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint is an autogenerated conversion function.
|
||||
func Convert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(in *v1beta3.UtilizationShapePoint, out *config.UtilizationShapePoint, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(in *config.UtilizationShapePoint, out *v1beta3.UtilizationShapePoint, s conversion.Scope) error {
|
||||
out.Utilization = in.Utilization
|
||||
out.Score = in.Score
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint is an autogenerated conversion function.
|
||||
func Convert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(in *config.UtilizationShapePoint, out *v1beta3.UtilizationShapePoint, s conversion.Scope) error {
|
||||
return autoConvert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(in *v1beta3.VolumeBindingArgs, out *config.VolumeBindingArgs, s conversion.Scope) error {
|
||||
if err := v1.Convert_Pointer_int64_To_int64(&in.BindTimeoutSeconds, &out.BindTimeoutSeconds, s); err != nil {
|
||||
return err
|
||||
}
|
||||
out.Shape = *(*[]config.UtilizationShapePoint)(unsafe.Pointer(&in.Shape))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs is an autogenerated conversion function.
|
||||
func Convert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(in *v1beta3.VolumeBindingArgs, out *config.VolumeBindingArgs, s conversion.Scope) error {
|
||||
return autoConvert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(in *config.VolumeBindingArgs, out *v1beta3.VolumeBindingArgs, s conversion.Scope) error {
|
||||
if err := v1.Convert_int64_To_Pointer_int64(&in.BindTimeoutSeconds, &out.BindTimeoutSeconds, s); err != nil {
|
||||
return err
|
||||
}
|
||||
out.Shape = *(*[]v1beta3.UtilizationShapePoint)(unsafe.Pointer(&in.Shape))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs is an autogenerated conversion function.
|
||||
func Convert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(in *config.VolumeBindingArgs, out *v1beta3.VolumeBindingArgs, s conversion.Scope) error {
|
||||
return autoConvert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(in, out, s)
|
||||
}
|
||||
22
pkg/scheduler/apis/config/v1beta3/zz_generated.deepcopy.go
generated
Normal file
22
pkg/scheduler/apis/config/v1beta3/zz_generated.deepcopy.go
generated
Normal file
@@ -0,0 +1,22 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
Copyright The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by deepcopy-gen. DO NOT EDIT.
|
||||
|
||||
package v1beta3
|
||||
73
pkg/scheduler/apis/config/v1beta3/zz_generated.defaults.go
generated
Normal file
73
pkg/scheduler/apis/config/v1beta3/zz_generated.defaults.go
generated
Normal file
@@ -0,0 +1,73 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
Copyright The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by defaulter-gen. DO NOT EDIT.
|
||||
|
||||
package v1beta3
|
||||
|
||||
import (
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
v1beta3 "k8s.io/kube-scheduler/config/v1beta3"
|
||||
)
|
||||
|
||||
// RegisterDefaults adds defaulters functions to the given scheme.
|
||||
// Public to allow building arbitrary schemes.
|
||||
// All generated defaulters are covering - they call all nested defaulters.
|
||||
func RegisterDefaults(scheme *runtime.Scheme) error {
|
||||
scheme.AddTypeDefaultingFunc(&v1beta3.DefaultPreemptionArgs{}, func(obj interface{}) { SetObjectDefaults_DefaultPreemptionArgs(obj.(*v1beta3.DefaultPreemptionArgs)) })
|
||||
scheme.AddTypeDefaultingFunc(&v1beta3.InterPodAffinityArgs{}, func(obj interface{}) { SetObjectDefaults_InterPodAffinityArgs(obj.(*v1beta3.InterPodAffinityArgs)) })
|
||||
scheme.AddTypeDefaultingFunc(&v1beta3.KubeSchedulerConfiguration{}, func(obj interface{}) {
|
||||
SetObjectDefaults_KubeSchedulerConfiguration(obj.(*v1beta3.KubeSchedulerConfiguration))
|
||||
})
|
||||
scheme.AddTypeDefaultingFunc(&v1beta3.NodeResourcesBalancedAllocationArgs{}, func(obj interface{}) {
|
||||
SetObjectDefaults_NodeResourcesBalancedAllocationArgs(obj.(*v1beta3.NodeResourcesBalancedAllocationArgs))
|
||||
})
|
||||
scheme.AddTypeDefaultingFunc(&v1beta3.NodeResourcesFitArgs{}, func(obj interface{}) { SetObjectDefaults_NodeResourcesFitArgs(obj.(*v1beta3.NodeResourcesFitArgs)) })
|
||||
scheme.AddTypeDefaultingFunc(&v1beta3.PodTopologySpreadArgs{}, func(obj interface{}) { SetObjectDefaults_PodTopologySpreadArgs(obj.(*v1beta3.PodTopologySpreadArgs)) })
|
||||
scheme.AddTypeDefaultingFunc(&v1beta3.VolumeBindingArgs{}, func(obj interface{}) { SetObjectDefaults_VolumeBindingArgs(obj.(*v1beta3.VolumeBindingArgs)) })
|
||||
return nil
|
||||
}
|
||||
|
||||
func SetObjectDefaults_DefaultPreemptionArgs(in *v1beta3.DefaultPreemptionArgs) {
|
||||
SetDefaults_DefaultPreemptionArgs(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_InterPodAffinityArgs(in *v1beta3.InterPodAffinityArgs) {
|
||||
SetDefaults_InterPodAffinityArgs(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_KubeSchedulerConfiguration(in *v1beta3.KubeSchedulerConfiguration) {
|
||||
SetDefaults_KubeSchedulerConfiguration(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_NodeResourcesBalancedAllocationArgs(in *v1beta3.NodeResourcesBalancedAllocationArgs) {
|
||||
SetDefaults_NodeResourcesBalancedAllocationArgs(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_NodeResourcesFitArgs(in *v1beta3.NodeResourcesFitArgs) {
|
||||
SetDefaults_NodeResourcesFitArgs(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs) {
|
||||
SetDefaults_PodTopologySpreadArgs(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_VolumeBindingArgs(in *v1beta3.VolumeBindingArgs) {
|
||||
SetDefaults_VolumeBindingArgs(in)
|
||||
}
|
||||
Reference in New Issue
Block a user