Move GetTopic function out of runc shim

Every shim implementation needs to select a correct publisher topic when posting events, so move it out of Linux-only runc code to the place where other shims can also use it

Otherwise, shims have to copy-paste this code. For example, see runj: 8158e558a3/containerd/shim.go (L144-L172)

Signed-off-by: Marat Radchenko <marat@slonopotamus.org>
This commit is contained in:
Marat Radchenko
2023-06-30 10:29:21 +03:00
parent 5d1ab0129e
commit 0607e73263
3 changed files with 37 additions and 34 deletions

View File

@@ -16,6 +16,11 @@
package runtime
import (
"github.com/containerd/containerd/api/events"
"github.com/containerd/containerd/log"
)
const (
// TaskCreateEventTopic for task create
TaskCreateEventTopic = "/tasks/create"
@@ -40,3 +45,33 @@ const (
// TaskUnknownTopic for unknown task events
TaskUnknownTopic = "/tasks/?"
)
// GetTopic converts an event from an interface type to the specific
// event topic id
func GetTopic(e interface{}) string {
switch e.(type) {
case *events.TaskCreate:
return TaskCreateEventTopic
case *events.TaskStart:
return TaskStartEventTopic
case *events.TaskOOM:
return TaskOOMEventTopic
case *events.TaskExit:
return TaskExitEventTopic
case *events.TaskDelete:
return TaskDeleteEventTopic
case *events.TaskExecAdded:
return TaskExecAddedEventTopic
case *events.TaskExecStarted:
return TaskExecStartedEventTopic
case *events.TaskPaused:
return TaskPausedEventTopic
case *events.TaskResumed:
return TaskResumedEventTopic
case *events.TaskCheckpointed:
return TaskCheckpointedEventTopic
default:
log.L.Warnf("no topic for type %#v", e)
}
return TaskUnknownTopic
}