Skip to content

Commit

Permalink
Merge pull request #3254 from corhere/c8dexecutor-inprocess-lifecycle…
Browse files Browse the repository at this point in the history
…-hook

[RFC] containerdexecutor: add network namespace callback
  • Loading branch information
tonistiigi committed Dec 22, 2022
2 parents de7dd7a + b5fdf90 commit e0220af
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions executor/containerdexecutor/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,19 @@ type containerdExecutor struct {
rootless bool
}

// OnCreateRuntimer provides an alternative to OCI hooks for applying network
// configuration to a container. If the [network.Provider] returns a
// [network.Namespace] which also implements this interface, the containerd
// executor will run the callback at the appropriate point in the container
// lifecycle.
type OnCreateRuntimer interface {
// OnCreateRuntime is analogous to the createRuntime OCI hook. The
// function is called after the container is created, before the user
// process has been executed. The argument is the container PID in the
// runtime namespace.
OnCreateRuntime(pid uint32) error
}

// New creates a new executor backed by connection to containerd API
func New(client *containerd.Client, root, cgroup string, networkProviders map[pb.NetMode]network.Provider, dnsConfig *oci.DNSConfig, apparmorProfile string, selinux bool, traceSocket string, rootless bool) executor.Executor {
// clean up old hosts/resolv.conf file. ignore errors
Expand Down Expand Up @@ -210,6 +223,12 @@ func (w *containerdExecutor) Run(ctx context.Context, id string, root executor.M
}
}()

if nn, ok := namespace.(OnCreateRuntimer); ok {
if err := nn.OnCreateRuntime(task.Pid()); err != nil {
return err
}
}

trace.SpanFromContext(ctx).AddEvent("Container created")
err = w.runProcess(ctx, task, process.Resize, process.Signal, func() {
startedOnce.Do(func() {
Expand Down

0 comments on commit e0220af

Please sign in to comment.