Add container monitor plugin type for restart

Adds a plugin type for container monitor.
Rename the task monitor type to avoid confusion.
Add config migration for new plugin types to pass existing migration
tests.

Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
Derek McGowan 2024-02-07 22:19:35 -08:00
parent 00fe7a4974
commit f8f1e5f7a6
No known key found for this signature in database
GPG Key ID: F58C5D0A4405ACDB
3 changed files with 35 additions and 2 deletions

View File

@ -19,12 +19,15 @@
package cgroups package cgroups
import ( import (
"context"
"github.com/containerd/cgroups/v3" "github.com/containerd/cgroups/v3"
v1 "github.com/containerd/containerd/v2/core/metrics/cgroups/v1" v1 "github.com/containerd/containerd/v2/core/metrics/cgroups/v1"
v2 "github.com/containerd/containerd/v2/core/metrics/cgroups/v2" v2 "github.com/containerd/containerd/v2/core/metrics/cgroups/v2"
"github.com/containerd/containerd/v2/core/runtime" "github.com/containerd/containerd/v2/core/runtime"
"github.com/containerd/containerd/v2/pkg/events" "github.com/containerd/containerd/v2/pkg/events"
"github.com/containerd/containerd/v2/plugins" "github.com/containerd/containerd/v2/plugins"
"github.com/containerd/containerd/v2/version"
"github.com/containerd/platforms" "github.com/containerd/platforms"
"github.com/containerd/plugin" "github.com/containerd/plugin"
"github.com/containerd/plugin/registry" "github.com/containerd/plugin/registry"
@ -45,6 +48,20 @@ func init() {
plugins.EventPlugin, plugins.EventPlugin,
}, },
Config: &Config{}, Config: &Config{},
ConfigMigration: func(ctx context.Context, configVersion int, pluginConfigs map[string]interface{}) error {
if configVersion >= version.ConfigVersion {
return nil
}
// Previous plugin name
const pluginName = "io.containerd.monitor.v1.cgroups"
c, ok := pluginConfigs[pluginName]
if ok {
pluginConfigs[string(plugins.TaskMonitorPlugin)+".cgroups"] = c
delete(pluginConfigs, pluginName)
}
return nil
},
}) })
} }

View File

@ -28,6 +28,7 @@ import (
"github.com/containerd/containerd/v2/internal/tomlext" "github.com/containerd/containerd/v2/internal/tomlext"
"github.com/containerd/containerd/v2/pkg/namespaces" "github.com/containerd/containerd/v2/pkg/namespaces"
"github.com/containerd/containerd/v2/plugins" "github.com/containerd/containerd/v2/plugins"
"github.com/containerd/containerd/v2/version"
"github.com/containerd/log" "github.com/containerd/log"
"github.com/containerd/plugin" "github.com/containerd/plugin"
"github.com/containerd/plugin/registry" "github.com/containerd/plugin/registry"
@ -41,7 +42,7 @@ type Config struct {
func init() { func init() {
registry.Register(&plugin.Registration{ registry.Register(&plugin.Registration{
Type: plugins.InternalPlugin, Type: plugins.ContainerMonitorPlugin,
Requires: []plugin.Type{ Requires: []plugin.Type{
plugins.EventPlugin, plugins.EventPlugin,
plugins.ServicePlugin, plugins.ServicePlugin,
@ -62,6 +63,19 @@ func init() {
go m.run(tomlext.ToStdTime(ic.Config.(*Config).Interval)) go m.run(tomlext.ToStdTime(ic.Config.(*Config).Interval))
return m, nil return m, nil
}, },
ConfigMigration: func(ctx context.Context, configVersion int, pluginConfigs map[string]interface{}) error {
if configVersion >= version.ConfigVersion {
return nil
}
const pluginName = string(plugins.InternalPlugin) + ".restart"
c, ok := pluginConfigs[pluginName]
if ok {
pluginConfigs[string(plugins.ContainerMonitorPlugin)+".restart"] = c
delete(pluginConfigs, pluginName)
}
return nil
},
}) })
} }

View File

@ -38,7 +38,9 @@ const (
// SnapshotPlugin implements a snapshotter // SnapshotPlugin implements a snapshotter
SnapshotPlugin plugin.Type = "io.containerd.snapshotter.v1" SnapshotPlugin plugin.Type = "io.containerd.snapshotter.v1"
// TaskMonitorPlugin implements a task monitor // TaskMonitorPlugin implements a task monitor
TaskMonitorPlugin plugin.Type = "io.containerd.monitor.v1" TaskMonitorPlugin plugin.Type = "io.containerd.monitor.task.v1"
// TaskMonitorPlugin implements a container monitor
ContainerMonitorPlugin plugin.Type = "io.containerd.monitor.container.v1"
// DiffPlugin implements a differ // DiffPlugin implements a differ
DiffPlugin plugin.Type = "io.containerd.differ.v1" DiffPlugin plugin.Type = "io.containerd.differ.v1"
// MetadataPlugin implements a metadata store // MetadataPlugin implements a metadata store