mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-29 04:04:45 +00:00
katautils: run prestart hooks after starting VM
So that we can pass the hypervisor pid to the hook instead of the runtime process's. Signed-off-by: Peng Tao <bergwolf@hyper.sh>
This commit is contained in:
parent
1511587a9a
commit
cb84b0fb02
@ -162,6 +162,21 @@ func CreateSandbox(ctx context.Context, vci vc.VC, ociSpec specs.Spec, runtimeCo
|
||||
ociSpec.Annotations["nerdctl/network-namespace"] = sandboxConfig.NetworkConfig.NetworkID
|
||||
sandboxConfig.Annotations["nerdctl/network-namespace"] = ociSpec.Annotations["nerdctl/network-namespace"]
|
||||
|
||||
sandbox, err := vci.CreateSandbox(ctx, sandboxConfig)
|
||||
if err != nil {
|
||||
return nil, vc.Process{}, err
|
||||
}
|
||||
|
||||
hid, err := sandbox.GetHypervisorPid()
|
||||
if err != nil {
|
||||
return nil, vc.Process{}, err
|
||||
}
|
||||
ctx = context.WithValue(ctx, "hypervisor-pid", hid)
|
||||
|
||||
sid := sandbox.ID()
|
||||
kataUtilsLogger = kataUtilsLogger.WithField("sandbox", sid)
|
||||
katatrace.AddTags(span, "sandbox_id", sid)
|
||||
|
||||
// Run pre-start OCI hooks, in the runtime namespace.
|
||||
if err := PreStartHooks(ctx, ociSpec, containerID, bundlePath); err != nil {
|
||||
return nil, vc.Process{}, err
|
||||
@ -172,15 +187,6 @@ func CreateSandbox(ctx context.Context, vci vc.VC, ociSpec specs.Spec, runtimeCo
|
||||
return nil, vc.Process{}, err
|
||||
}
|
||||
|
||||
sandbox, err := vci.CreateSandbox(ctx, sandboxConfig)
|
||||
if err != nil {
|
||||
return nil, vc.Process{}, err
|
||||
}
|
||||
|
||||
sid := sandbox.ID()
|
||||
kataUtilsLogger = kataUtilsLogger.WithField("sandbox", sid)
|
||||
katatrace.AddTags(span, "sandbox_id", sid)
|
||||
|
||||
containers := sandbox.GetAllContainers()
|
||||
if len(containers) != 1 {
|
||||
return nil, vc.Process{}, fmt.Errorf("BUG: Container list from sandbox is wrong, expecting only one container, found %d containers", len(containers))
|
||||
@ -255,6 +261,12 @@ func CreateContainer(ctx context.Context, sandbox vc.VCSandbox, ociSpec specs.Sp
|
||||
return vc.Process{}, err
|
||||
}
|
||||
|
||||
hid, err := sandbox.GetHypervisorPid()
|
||||
if err != nil {
|
||||
return vc.Process{}, err
|
||||
}
|
||||
ctx = context.WithValue(ctx, HypervisorPidKey{}, hid)
|
||||
|
||||
// Run pre-start OCI hooks.
|
||||
err = EnterNetNS(sandbox.GetNetNs(), func() error {
|
||||
return PreStartHooks(ctx, ociSpec, containerID, bundlePath)
|
||||
|
@ -28,6 +28,8 @@ var hookTracingTags = map[string]string{
|
||||
"subsystem": "hook",
|
||||
}
|
||||
|
||||
type HypervisorPidKey struct{}
|
||||
|
||||
// Logger returns a logrus logger appropriate for logging hook messages
|
||||
func hookLogger() *logrus.Entry {
|
||||
return kataUtilsLogger.WithField("subsystem", "hook")
|
||||
@ -38,8 +40,16 @@ func runHook(ctx context.Context, spec specs.Spec, hook specs.Hook, cid, bundleP
|
||||
defer span.End()
|
||||
katatrace.AddTags(span, "path", hook.Path, "args", hook.Args)
|
||||
|
||||
pid, ok := ctx.Value(HypervisorPidKey{}).(int)
|
||||
if !ok || pid == 0 {
|
||||
hookLogger().Info("no hypervisor pid")
|
||||
|
||||
pid = syscallWrapper.Gettid()
|
||||
}
|
||||
hookLogger().Infof("hypervisor pid %v", pid)
|
||||
|
||||
state := specs.State{
|
||||
Pid: syscallWrapper.Gettid(),
|
||||
Pid: pid,
|
||||
Bundle: bundlePath,
|
||||
ID: cid,
|
||||
Annotations: spec.Annotations,
|
||||
|
Loading…
Reference in New Issue
Block a user