mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 15:05:27 +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
|
return defaultPlugins
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type pluginIndex struct {
|
||||||
|
index int
|
||||||
|
plugin v1beta2.Plugin
|
||||||
|
}
|
||||||
|
|
||||||
func mergePluginSet(defaultPluginSet, customPluginSet v1beta2.PluginSet) v1beta2.PluginSet {
|
func mergePluginSet(defaultPluginSet, customPluginSet v1beta2.PluginSet) v1beta2.PluginSet {
|
||||||
disabledPlugins := sets.NewString()
|
disabledPlugins := sets.NewString()
|
||||||
|
enabledCustomPlugins := make(map[string]pluginIndex)
|
||||||
for _, disabledPlugin := range customPluginSet.Disabled {
|
for _, disabledPlugin := range customPluginSet.Disabled {
|
||||||
disabledPlugins.Insert(disabledPlugin.Name)
|
disabledPlugins.Insert(disabledPlugin.Name)
|
||||||
}
|
}
|
||||||
|
for index, enabledPlugin := range customPluginSet.Enabled {
|
||||||
|
enabledCustomPlugins[enabledPlugin.Name] = pluginIndex{index, enabledPlugin}
|
||||||
|
}
|
||||||
var enabledPlugins []v1beta2.Plugin
|
var enabledPlugins []v1beta2.Plugin
|
||||||
if !disabledPlugins.Has("*") {
|
if !disabledPlugins.Has("*") {
|
||||||
for _, defaultEnabledPlugin := range defaultPluginSet.Enabled {
|
for _, defaultEnabledPlugin := range defaultPluginSet.Enabled {
|
||||||
if disabledPlugins.Has(defaultEnabledPlugin.Name) {
|
if disabledPlugins.Has(defaultEnabledPlugin.Name) {
|
||||||
continue
|
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)
|
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 {
|
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.
|
// If an array is empty, missing, or nil, default plugins at that extension point will be used.
|
||||||
type PluginSet struct {
|
type PluginSet struct {
|
||||||
// Enabled specifies plugins that should be enabled in addition to default plugins.
|
// 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.
|
// These are called after default plugins and in the same order specified here.
|
||||||
// +listType=atomic
|
// +listType=atomic
|
||||||
Enabled []Plugin `json:"enabled,omitempty"`
|
Enabled []Plugin `json:"enabled,omitempty"`
|
||||||
|
Loading…
Reference in New Issue
Block a user