mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 12:43:23 +00:00
Update the plugin watcher interface
This commit is contained in:
parent
e5f55dd9d0
commit
2eb91e89c0
59
pkg/kubelet/util/pluginwatcher/types.go
Normal file
59
pkg/kubelet/util/pluginwatcher/types.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 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 pluginwatcher
|
||||||
|
|
||||||
|
// PluginHandler is an interface a client of the pluginwatcher API needs to implement in
|
||||||
|
// order to consume plugins
|
||||||
|
// The PluginHandler follows the simple following state machine:
|
||||||
|
//
|
||||||
|
// +--------------------------------------+
|
||||||
|
// | ReRegistration |
|
||||||
|
// | Socket created with same plugin name |
|
||||||
|
// | |
|
||||||
|
// | |
|
||||||
|
// Socket Created v + Socket Deleted
|
||||||
|
// +------------------> Validate +---------------------------> Register +------------------> DeRegister
|
||||||
|
// + + +
|
||||||
|
// | | |
|
||||||
|
// | Error | Error |
|
||||||
|
// | | |
|
||||||
|
// v v v
|
||||||
|
// Out Out Out
|
||||||
|
//
|
||||||
|
// The pluginwatcher module follows strictly and sequentially this state machine for each *plugin name*.
|
||||||
|
// e.g: If you are Registering a plugin foo, you cannot get a DeRegister call for plugin foo
|
||||||
|
// until the Register("foo") call returns. Nor will you get a Validate("foo", "Different endpoint", ...)
|
||||||
|
// call until the Register("foo") call returns.
|
||||||
|
//
|
||||||
|
// ReRegistration: Socket created with same plugin name, usually for a plugin update
|
||||||
|
// e.g: plugin with name foo registers at foo.com/foo-1.9.7 later a plugin with name foo
|
||||||
|
// registers at foo.com/foo-1.9.9
|
||||||
|
//
|
||||||
|
// DeRegistration: When ReRegistration happens only the deletion of the new socket will trigger a DeRegister call
|
||||||
|
|
||||||
|
type PluginHandler interface {
|
||||||
|
// Validate returns an error if the information provided by
|
||||||
|
// the potential plugin is erroneous (unsupported version, ...)
|
||||||
|
ValidatePlugin(pluginName string, endpoint string, versions []string) error
|
||||||
|
// RegisterPlugin is called so that the plugin can be register by any
|
||||||
|
// plugin consumer
|
||||||
|
// Error encountered here can still be Notified to the plugin.
|
||||||
|
RegisterPlugin(pluginName, endpoint string) error
|
||||||
|
// DeRegister is called once the pluginwatcher observes that the socket has
|
||||||
|
// been deleted.
|
||||||
|
DeRegisterPlugin(pluginName string)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user