1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /*
- Copyright 2019 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 v1alpha1
- import (
- "fmt"
- "k8s.io/apimachinery/pkg/runtime"
- )
- // PluginFactory is a function that builds a plugin.
- type PluginFactory = func(configuration *runtime.Unknown, f FrameworkHandle) (Plugin, error)
- // Registry is a collection of all available plugins. The framework uses a
- // registry to enable and initialize configured plugins.
- // All plugins must be in the registry before initializing the framework.
- type Registry map[string]PluginFactory
- // Register adds a new plugin to the registry. If a plugin with the same name
- // exists, it returns an error.
- func (r Registry) Register(name string, factory PluginFactory) error {
- if _, ok := r[name]; ok {
- return fmt.Errorf("a plugin named %v already exists", name)
- }
- r[name] = factory
- return nil
- }
- // Unregister removes an existing plugin from the registry. If no plugin with
- // the provided name exists, it returns an error.
- func (r Registry) Unregister(name string) error {
- if _, ok := r[name]; !ok {
- return fmt.Errorf("no plugin named %v exists", name)
- }
- delete(r, name)
- return nil
- }
- // NewRegistry builds a default registry with all the default plugins.
- // This is the registry that Kubernetes default scheduler uses. A scheduler that
- // runs custom plugins, can pass a different Registry and when initializing the
- // scheduler.
- func NewRegistry() Registry {
- return Registry{
- // FactoryMap:
- // New plugins are registered here.
- // example:
- // {
- // stateful_plugin.Name: stateful.NewStatefulMultipointExample,
- // fooplugin.Name: fooplugin.New,
- // }
- }
- }
|