Merge pull request #111032 from kerthcet/cleanup/remove-validation-of-removed-plugins

Remove validation of removedPlugins in KubeSchedulerConfiguration
This commit is contained in:
Kubernetes Prow Robot 2022-07-12 08:32:14 -07:00 committed by GitHub
commit 098c733373
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 1 additions and 86 deletions

View File

@ -33,8 +33,6 @@ import (
componentbasevalidation "k8s.io/component-base/config/validation" componentbasevalidation "k8s.io/component-base/config/validation"
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
"k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config"
"k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta2"
"k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3"
) )
// ValidateKubeSchedulerConfiguration ensures validation of the KubeSchedulerConfiguration struct // ValidateKubeSchedulerConfiguration ensures validation of the KubeSchedulerConfiguration struct
@ -117,51 +115,6 @@ func splitHostIntPort(s string) (string, int, error) {
return host, portInt, err return host, portInt, err
} }
type removedPlugins struct {
schemeGroupVersion string
plugins []string
}
// removedPluginsByVersion maintains a list of removed plugins in each version.
// Remember to add an entry to that list when creating a new component config
// version (even if the list of removed plugins is empty).
var removedPluginsByVersion = []removedPlugins{
{
schemeGroupVersion: v1beta2.SchemeGroupVersion.String(),
plugins: []string{},
},
{
schemeGroupVersion: v1beta3.SchemeGroupVersion.String(),
plugins: []string{},
},
}
// isPluginRemoved checks if a given plugin was removed in the given component
// config version or earlier.
func isPluginRemoved(apiVersion string, name string) (bool, string) {
for _, dp := range removedPluginsByVersion {
for _, plugin := range dp.plugins {
if name == plugin {
return true, dp.schemeGroupVersion
}
}
if apiVersion == dp.schemeGroupVersion {
break
}
}
return false, ""
}
func validatePluginSetForRemovedPlugins(path *field.Path, apiVersion string, ps config.PluginSet) []error {
var errs []error
for i, plugin := range ps.Enabled {
if removed, removedVersion := isPluginRemoved(apiVersion, plugin.Name); removed {
errs = append(errs, field.Invalid(path.Child("enabled").Index(i), plugin.Name, fmt.Sprintf("was removed in version %q (KubeSchedulerConfiguration is version %q)", removedVersion, apiVersion)))
}
}
return errs
}
func validateKubeSchedulerProfile(path *field.Path, apiVersion string, profile *config.KubeSchedulerProfile) []error { func validateKubeSchedulerProfile(path *field.Path, apiVersion string, profile *config.KubeSchedulerProfile) []error {
var errs []error var errs []error
if len(profile.SchedulerName) == 0 { if len(profile.SchedulerName) == 0 {
@ -183,28 +136,6 @@ func validatePluginConfig(path *field.Path, apiVersion string, profile *config.K
"VolumeBinding": ValidateVolumeBindingArgs, "VolumeBinding": ValidateVolumeBindingArgs,
} }
if profile.Plugins != nil {
stagesToPluginSet := map[string]config.PluginSet{
"queueSort": profile.Plugins.QueueSort,
"preFilter": profile.Plugins.PreFilter,
"filter": profile.Plugins.Filter,
"postFilter": profile.Plugins.PostFilter,
"preScore": profile.Plugins.PreScore,
"score": profile.Plugins.Score,
"reserve": profile.Plugins.Reserve,
"permit": profile.Plugins.Permit,
"preBind": profile.Plugins.PreBind,
"bind": profile.Plugins.Bind,
"postBind": profile.Plugins.PostBind,
}
pluginsPath := path.Child("plugins")
for s, p := range stagesToPluginSet {
errs = append(errs, validatePluginSetForRemovedPlugins(
pluginsPath.Child(s), apiVersion, p)...)
}
}
seenPluginConfig := make(sets.String) seenPluginConfig := make(sets.String)
for i := range profile.PluginConfig { for i := range profile.PluginConfig {
@ -216,9 +147,7 @@ func validatePluginConfig(path *field.Path, apiVersion string, profile *config.K
} else { } else {
seenPluginConfig.Insert(name) seenPluginConfig.Insert(name)
} }
if removed, removedVersion := isPluginRemoved(apiVersion, name); removed { if validateFunc, ok := m[name]; ok {
errs = append(errs, field.Invalid(pluginConfigPath, name, fmt.Sprintf("was removed in version %q (KubeSchedulerConfiguration is version %q)", removedVersion, apiVersion)))
} else if validateFunc, ok := m[name]; ok {
// type mismatch, no need to validate the `args`. // type mismatch, no need to validate the `args`.
if reflect.TypeOf(args) != reflect.ValueOf(validateFunc).Type().In(1) { if reflect.TypeOf(args) != reflect.ValueOf(validateFunc).Type().In(1) {
errs = append(errs, field.Invalid(pluginConfigPath.Child("args"), args, "has to match plugin args")) errs = append(errs, field.Invalid(pluginConfigPath.Child("args"), args, "has to match plugin args"))

View File

@ -198,9 +198,6 @@ func TestValidateKubeSchedulerConfigurationV1beta2(t *testing.T) {
BindVerb: "bar", BindVerb: "bar",
}) })
goodRemovedPlugins2 := validConfig.DeepCopy()
goodRemovedPlugins2.Profiles[0].Plugins.Score.Enabled = append(goodRemovedPlugins2.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "PodTopologySpread", Weight: 2})
scenarios := map[string]struct { scenarios := map[string]struct {
expectedToFail bool expectedToFail bool
config *config.KubeSchedulerConfiguration config *config.KubeSchedulerConfiguration
@ -278,10 +275,6 @@ func TestValidateKubeSchedulerConfigurationV1beta2(t *testing.T) {
expectedToFail: true, expectedToFail: true,
config: mismatchQueueSort, config: mismatchQueueSort,
}, },
"good-removed-plugins-2": {
expectedToFail: false,
config: goodRemovedPlugins2,
},
} }
for name, scenario := range scenarios { for name, scenario := range scenarios {
@ -472,9 +465,6 @@ func TestValidateKubeSchedulerConfigurationV1beta3(t *testing.T) {
BindVerb: "bar", BindVerb: "bar",
}) })
goodRemovedPlugins2 := validConfig.DeepCopy()
goodRemovedPlugins2.Profiles[0].Plugins.Score.Enabled = append(goodRemovedPlugins2.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "PodTopologySpread", Weight: 2})
scenarios := map[string]struct { scenarios := map[string]struct {
expectedToFail bool expectedToFail bool
config *config.KubeSchedulerConfiguration config *config.KubeSchedulerConfiguration
@ -552,10 +542,6 @@ func TestValidateKubeSchedulerConfigurationV1beta3(t *testing.T) {
expectedToFail: true, expectedToFail: true,
config: mismatchQueueSort, config: mismatchQueueSort,
}, },
"good-removed-plugins-2": {
expectedToFail: false,
config: goodRemovedPlugins2,
},
} }
for name, scenario := range scenarios { for name, scenario := range scenarios {