diff --git a/cmd/containerd/builtins/builtins.go b/cmd/containerd/builtins/builtins.go index c2dbcdc47..17c8b4e5f 100644 --- a/cmd/containerd/builtins/builtins.go +++ b/cmd/containerd/builtins/builtins.go @@ -19,6 +19,7 @@ package builtins // register containerd builtins here import ( _ "github.com/containerd/containerd/v2/core/runtime/v2" + _ "github.com/containerd/containerd/v2/plugins/content/local/plugin" _ "github.com/containerd/containerd/v2/plugins/events" _ "github.com/containerd/containerd/v2/plugins/gc" _ "github.com/containerd/containerd/v2/plugins/imageverifier" diff --git a/cmd/containerd/server/server.go b/cmd/containerd/server/server.go index b3d5b7575..6b0857869 100644 --- a/cmd/containerd/server/server.go +++ b/cmd/containerd/server/server.go @@ -49,6 +49,11 @@ import ( diffapi "github.com/containerd/containerd/api/services/diff/v1" sbapi "github.com/containerd/containerd/api/services/sandbox/v1" ssapi "github.com/containerd/containerd/api/services/snapshots/v1" + "github.com/containerd/platforms" + "github.com/containerd/plugin" + "github.com/containerd/plugin/dynamic" + "github.com/containerd/plugin/registry" + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" csproxy "github.com/containerd/containerd/v2/core/content/proxy" "github.com/containerd/containerd/v2/core/diff" @@ -61,13 +66,8 @@ import ( "github.com/containerd/containerd/v2/pkg/sys" "github.com/containerd/containerd/v2/pkg/timeout" "github.com/containerd/containerd/v2/plugins" - "github.com/containerd/containerd/v2/plugins/content/local" "github.com/containerd/containerd/v2/plugins/services/warning" "github.com/containerd/containerd/v2/version" - "github.com/containerd/platforms" - "github.com/containerd/plugin" - "github.com/containerd/plugin/dynamic" - "github.com/containerd/plugin/registry" ) // CreateTopLevelDirectories creates the top-level root and state directories. @@ -482,16 +482,6 @@ func LoadPlugins(ctx context.Context, config *srvconfig.Config) ([]plugin.Regist 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 - registry.Register(&plugin.Registration{ - Type: plugins.ContentPlugin, - ID: "content", - InitFn: func(ic *plugin.InitContext) (interface{}, error) { - root := ic.Properties[plugins.PropertyRootDir] - ic.Meta.Exports["root"] = root - return local.NewStore(root) - }, - }) clients := &proxyClients{} for name, pp := range config.ProxyPlugins { diff --git a/integration/build_local_containerd_helper_test.go b/integration/build_local_containerd_helper_test.go index e1c741a40..fea3aad7f 100644 --- a/integration/build_local_containerd_helper_test.go +++ b/integration/build_local_containerd_helper_test.go @@ -36,6 +36,7 @@ import ( _ "github.com/containerd/containerd/api/types/runc/options" _ "github.com/containerd/containerd/v2/core/runtime/v2" + _ "github.com/containerd/containerd/v2/plugins/content/local/plugin" _ "github.com/containerd/containerd/v2/plugins/cri/images" _ "github.com/containerd/containerd/v2/plugins/cri/runtime" _ "github.com/containerd/containerd/v2/plugins/diff/walking/plugin" diff --git a/plugins/content/local/plugin/plugin.go b/plugins/content/local/plugin/plugin.go new file mode 100644 index 000000000..ce83c9ae6 --- /dev/null +++ b/plugins/content/local/plugin/plugin.go @@ -0,0 +1,37 @@ +/* + Copyright The containerd 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 plugin + +import ( + "github.com/containerd/plugin" + "github.com/containerd/plugin/registry" + + "github.com/containerd/containerd/v2/plugins" + "github.com/containerd/containerd/v2/plugins/content/local" +) + +func init() { + registry.Register(&plugin.Registration{ + Type: plugins.ContentPlugin, + ID: "content", + InitFn: func(ic *plugin.InitContext) (interface{}, error) { + root := ic.Properties[plugins.PropertyRootDir] + ic.Meta.Exports["root"] = root + return local.NewStore(root) + }, + }) +}