dynamic: record deprecation for dynamic plugins
Signed-off-by: Samuel Karp <samuelkarp@google.com>
This commit is contained in:
parent
260e71abc4
commit
079383dbec
@ -23,7 +23,7 @@ import "fmt"
|
|||||||
// Load is currently only implemented on non-static, non-gccgo builds for amd64
|
// Load is currently only implemented on non-static, non-gccgo builds for amd64
|
||||||
// and arm64, and plugins must be built with the exact same version of Go as
|
// and arm64, and plugins must be built with the exact same version of Go as
|
||||||
// containerd itself.
|
// containerd itself.
|
||||||
func Load(path string) (err error) {
|
func Load(path string) (loaded int, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if v := recover(); v != nil {
|
if v := recover(); v != nil {
|
||||||
rerr, ok := v.(error)
|
rerr, ok := v.(error)
|
||||||
|
@ -25,12 +25,13 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// loadPlugins loads all plugins for the OS and Arch
|
// loadPlugins loads all plugins for the OS and Arch that containerd is built
|
||||||
// that containerd is built for inside the provided path
|
// for inside the provided path and returns the count of successfully-loaded
|
||||||
func loadPlugins(path string) error {
|
// plugins
|
||||||
|
func loadPlugins(path string) (int, error) {
|
||||||
abs, err := filepath.Abs(path)
|
abs, err := filepath.Abs(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return 0, err
|
||||||
}
|
}
|
||||||
pattern := filepath.Join(abs, fmt.Sprintf(
|
pattern := filepath.Join(abs, fmt.Sprintf(
|
||||||
"*-%s-%s.%s",
|
"*-%s-%s.%s",
|
||||||
@ -40,14 +41,16 @@ func loadPlugins(path string) error {
|
|||||||
))
|
))
|
||||||
libs, err := filepath.Glob(pattern)
|
libs, err := filepath.Glob(pattern)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
loaded := 0
|
||||||
for _, lib := range libs {
|
for _, lib := range libs {
|
||||||
if _, err := plugin.Open(lib); err != nil {
|
if _, err := plugin.Open(lib); err != nil {
|
||||||
return err
|
return loaded, err
|
||||||
}
|
}
|
||||||
|
loaded++
|
||||||
}
|
}
|
||||||
return nil
|
return loaded, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getLibExt returns a platform specific lib extension for
|
// getLibExt returns a platform specific lib extension for
|
||||||
|
@ -23,6 +23,6 @@ package dynamic
|
|||||||
// - with gccgo: gccgo has no plugin support golang/go#36403
|
// - with gccgo: gccgo has no plugin support golang/go#36403
|
||||||
// - on static builds; https://github.com/containerd/containerd/commit/0d682e24a1ba8e93e5e54a73d64f7d256f87492f
|
// - on static builds; https://github.com/containerd/containerd/commit/0d682e24a1ba8e93e5e54a73d64f7d256f87492f
|
||||||
// - on architectures other than amd64 and arm64 (other architectures need to be tested)
|
// - on architectures other than amd64 and arm64 (other architectures need to be tested)
|
||||||
func loadPlugins(path string) error {
|
func loadPlugins(path string) (int, error) {
|
||||||
return nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,7 @@ import (
|
|||||||
"github.com/containerd/containerd/defaults"
|
"github.com/containerd/containerd/defaults"
|
||||||
"github.com/containerd/containerd/diff"
|
"github.com/containerd/containerd/diff"
|
||||||
diffproxy "github.com/containerd/containerd/diff/proxy"
|
diffproxy "github.com/containerd/containerd/diff/proxy"
|
||||||
|
"github.com/containerd/containerd/pkg/deprecation"
|
||||||
"github.com/containerd/containerd/pkg/dialer"
|
"github.com/containerd/containerd/pkg/dialer"
|
||||||
"github.com/containerd/containerd/pkg/timeout"
|
"github.com/containerd/containerd/pkg/timeout"
|
||||||
"github.com/containerd/containerd/platforms"
|
"github.com/containerd/containerd/platforms"
|
||||||
@ -356,7 +357,9 @@ func recordConfigDeprecations(ctx context.Context, config *srvconfig.Config, set
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = warn // TODO(samuelkarp): placeholder for future use
|
if config.PluginDir != "" { //nolint:staticcheck
|
||||||
|
warn.Emit(ctx, deprecation.GoPluginLibrary)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server is the containerd main daemon
|
// Server is the containerd main daemon
|
||||||
@ -463,9 +466,11 @@ func LoadPlugins(ctx context.Context, config *srvconfig.Config) ([]plugin.Regist
|
|||||||
if path == "" {
|
if path == "" {
|
||||||
path = filepath.Join(config.Root, "plugins")
|
path = filepath.Join(config.Root, "plugins")
|
||||||
}
|
}
|
||||||
log.G(ctx).Warning("`go_plugin` is deprecated, please use `external plugins` instead")
|
if count, err := dynamic.Load(path); err != nil {
|
||||||
if err := dynamic.Load(path); err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
|
} else if count > 0 || config.PluginDir != "" { //nolint:staticcheck
|
||||||
|
config.PluginDir = path //nolint:staticcheck
|
||||||
|
log.G(ctx).Warningf("loaded %d dynamic plugins. `go_plugin` is deprecated, please use `external plugins` instead", count)
|
||||||
}
|
}
|
||||||
// load additional plugins that don't automatically register themselves
|
// load additional plugins that don't automatically register themselves
|
||||||
registry.Register(&plugin.Registration{
|
registry.Register(&plugin.Registration{
|
||||||
|
@ -52,16 +52,6 @@ type Warning struct {
|
|||||||
|
|
||||||
var _ Service = (*service)(nil)
|
var _ Service = (*service)(nil)
|
||||||
|
|
||||||
func init() {
|
|
||||||
registry.Register(&plugin.Registration{
|
|
||||||
Type: plugins.InternalPlugin,
|
|
||||||
ID: "warning",
|
|
||||||
InitFn: func(ic *plugin.InitContext) (interface{}, error) {
|
|
||||||
return &service{warnings: make(map[deprecation.Warning]time.Time)}, nil
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
type service struct {
|
type service struct {
|
||||||
warnings map[deprecation.Warning]time.Time
|
warnings map[deprecation.Warning]time.Time
|
||||||
m sync.RWMutex
|
m sync.RWMutex
|
||||||
|
Loading…
Reference in New Issue
Block a user