[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