mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-05-01 05:04:26 +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
|
ociSpec.Annotations["nerdctl/network-namespace"] = sandboxConfig.NetworkConfig.NetworkID
|
||||||
sandboxConfig.Annotations["nerdctl/network-namespace"] = ociSpec.Annotations["nerdctl/network-namespace"]
|
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.
|
// Run pre-start OCI hooks, in the runtime namespace.
|
||||||
if err := PreStartHooks(ctx, ociSpec, containerID, bundlePath); err != nil {
|
if err := PreStartHooks(ctx, ociSpec, containerID, bundlePath); err != nil {
|
||||||
return nil, vc.Process{}, err
|
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
|
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()
|
containers := sandbox.GetAllContainers()
|
||||||
if len(containers) != 1 {
|
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))
|
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
|
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.
|
// Run pre-start OCI hooks.
|
||||||
err = EnterNetNS(sandbox.GetNetNs(), func() error {
|
err = EnterNetNS(sandbox.GetNetNs(), func() error {
|
||||||
return PreStartHooks(ctx, ociSpec, containerID, bundlePath)
|
return PreStartHooks(ctx, ociSpec, containerID, bundlePath)
|
||||||
|
@ -28,6 +28,8 @@ var hookTracingTags = map[string]string{
|
|||||||
"subsystem": "hook",
|
"subsystem": "hook",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HypervisorPidKey struct{}
|
||||||
|
|
||||||
// Logger returns a logrus logger appropriate for logging hook messages
|
// Logger returns a logrus logger appropriate for logging hook messages
|
||||||
func hookLogger() *logrus.Entry {
|
func hookLogger() *logrus.Entry {
|
||||||
return kataUtilsLogger.WithField("subsystem", "hook")
|
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()
|
defer span.End()
|
||||||
katatrace.AddTags(span, "path", hook.Path, "args", hook.Args)
|
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{
|
state := specs.State{
|
||||||
Pid: syscallWrapper.Gettid(),
|
Pid: pid,
|
||||||
Bundle: bundlePath,
|
Bundle: bundlePath,
|
||||||
ID: cid,
|
ID: cid,
|
||||||
Annotations: spec.Annotations,
|
Annotations: spec.Annotations,
|
||||||
|
Loading…
Reference in New Issue
Block a user