mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Custom plugin config should take precedence over default plugin config
Signed-off-by: Dave Chen <dave.chen@arm.com>
This commit is contained in:
parent
7ad7c0757a
commit
9a5237ca63
@ -147,19 +147,34 @@ func mergePlugins(defaultPlugins, customPlugins *v1beta2.Plugins) *v1beta2.Plugi
|
||||
return defaultPlugins
|
||||
}
|
||||
|
||||
type pluginIndex struct {
|
||||
index int
|
||||
plugin v1beta2.Plugin
|
||||
}
|
||||
|
||||
func mergePluginSet(defaultPluginSet, customPluginSet v1beta2.PluginSet) v1beta2.PluginSet {
|
||||
disabledPlugins := sets.NewString()
|
||||
enabledCustomPlugins := make(map[string]pluginIndex)
|
||||
for _, disabledPlugin := range customPluginSet.Disabled {
|
||||
disabledPlugins.Insert(disabledPlugin.Name)
|
||||
}
|
||||
|
||||
for index, enabledPlugin := range customPluginSet.Enabled {
|
||||
enabledCustomPlugins[enabledPlugin.Name] = pluginIndex{index, enabledPlugin}
|
||||
}
|
||||
var enabledPlugins []v1beta2.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("Defaut plugin is explicitly re-configured and is overriding.", "plugin", defaultEnabledPlugin.Name)
|
||||
// update the default plugin in place to preserve order
|
||||
defaultEnabledPlugin = customPlugin.plugin
|
||||
// kick the plugin from the enabled list of custom plugins
|
||||
customPluginSet.Enabled = append(customPluginSet.Enabled[:customPlugin.index], customPluginSet.Enabled[customPlugin.index+1:]...)
|
||||
}
|
||||
enabledPlugins = append(enabledPlugins, defaultEnabledPlugin)
|
||||
}
|
||||
}
|
||||
|
@ -359,6 +359,58 @@ func TestMergePlugins(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "CustomPluginOverrideDefaultPlugin",
|
||||
customPlugins: &v1beta2.Plugins{
|
||||
Filter: v1beta2.PluginSet{
|
||||
Enabled: []v1beta2.Plugin{
|
||||
{Name: "Plugin1", Weight: pointer.Int32Ptr(2)},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta2.Plugins{
|
||||
Filter: v1beta2.PluginSet{
|
||||
Enabled: []v1beta2.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta2.Plugins{
|
||||
Filter: v1beta2.PluginSet{
|
||||
Enabled: []v1beta2.Plugin{
|
||||
{Name: "Plugin1", Weight: pointer.Int32Ptr(2)},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "OrderPreserveAfterOverride",
|
||||
customPlugins: &v1beta2.Plugins{
|
||||
Filter: v1beta2.PluginSet{
|
||||
Enabled: []v1beta2.Plugin{
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(2)},
|
||||
},
|
||||
},
|
||||
},
|
||||
defaultPlugins: &v1beta2.Plugins{
|
||||
Filter: v1beta2.PluginSet{
|
||||
Enabled: []v1beta2.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
{Name: "Plugin2"},
|
||||
{Name: "Plugin3"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedPlugins: &v1beta2.Plugins{
|
||||
Filter: v1beta2.PluginSet{
|
||||
Enabled: []v1beta2.Plugin{
|
||||
{Name: "Plugin1"},
|
||||
{Name: "Plugin2", Weight: pointer.Int32Ptr(2)},
|
||||
{Name: "Plugin3"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
@ -197,6 +197,8 @@ type Plugins struct {
|
||||
// If an array is empty, missing, or nil, default plugins at that extension point will be used.
|
||||
type PluginSet struct {
|
||||
// Enabled specifies plugins that should be enabled in addition to default plugins.
|
||||
// If the default plugin is also configured in the scheduler config file, the weight of plugin will
|
||||
// be overridden accordingly.
|
||||
// These are called after default plugins and in the same order specified here.
|
||||
// +listType=atomic
|
||||
Enabled []Plugin `json:"enabled,omitempty"`
|
||||
|
Loading…
Reference in New Issue
Block a user