diff --git a/virtcontainers/kata_agent.go b/virtcontainers/kata_agent.go index d631e59563..1477025ea2 100644 --- a/virtcontainers/kata_agent.go +++ b/virtcontainers/kata_agent.go @@ -498,7 +498,7 @@ func (k *kataAgent) exec(sandbox *Sandbox, c Container, cmd types.Cmd) (*Process } return prepareAndStartShim(sandbox, k.shim, c.id, req.ExecId, - k.state.URL, cmd, []ns.NSType{}, enterNSList) + k.state.URL, "", cmd, []ns.NSType{}, enterNSList) } func (k *kataAgent) updateInterface(ifc *vcTypes.Interface) (*vcTypes.Interface, error) { @@ -1214,8 +1214,17 @@ func (k *kataAgent) createContainer(sandbox *Sandbox, c *Container) (p *Process, }) } + // Ask to the shim to print the agent logs, if it's the process who monitors the sandbox and use_vsock is true (no proxy) + var consoleURL string + if sandbox.config.HypervisorConfig.UseVSock && c.GetAnnotations()[vcAnnotations.ContainerTypeKey] == string(PodSandbox) { + consoleURL, err = sandbox.hypervisor.getSandboxConsole(sandbox.id) + if err != nil { + return nil, err + } + } + return prepareAndStartShim(sandbox, k.shim, c.id, req.ExecId, - k.state.URL, c.config.Cmd, createNSList, enterNSList) + k.state.URL, consoleURL, c.config.Cmd, createNSList, enterNSList) } // handleEphemeralStorage handles ephemeral storages by diff --git a/virtcontainers/kata_shim.go b/virtcontainers/kata_shim.go index 3cd7ceeab5..d8c46adafc 100644 --- a/virtcontainers/kata_shim.go +++ b/virtcontainers/kata_shim.go @@ -48,6 +48,9 @@ func (s *kataShim) start(sandbox *Sandbox, params ShimParams) (int, error) { if config.Debug { args = append(args, "-log", "debug") + if params.ConsoleURL != "" { + args = append(args, "-agent-logs-socket", params.ConsoleURL) + } } if config.Trace { diff --git a/virtcontainers/shim.go b/virtcontainers/shim.go index 5f5b73ff12..8ec7458b6e 100644 --- a/virtcontainers/shim.go +++ b/virtcontainers/shim.go @@ -38,15 +38,16 @@ var consoleFileMode = os.FileMode(0660) // ShimParams is the structure providing specific parameters needed // for the execution of the shim binary. type ShimParams struct { - Container string - Token string - URL string - Console string - Terminal bool - Detach bool - PID int - CreateNS []ns.NSType - EnterNS []ns.Namespace + Container string + Token string + URL string + Console string + ConsoleURL string + Terminal bool + Detach bool + PID int + CreateNS []ns.NSType + EnterNS []ns.Namespace } // ShimConfig is the structure providing specific configuration @@ -147,7 +148,7 @@ func stopShim(pid int) error { return nil } -func prepareAndStartShim(sandbox *Sandbox, shim shim, cid, token, url string, cmd types.Cmd, +func prepareAndStartShim(sandbox *Sandbox, shim shim, cid, token, url, consoleURL string, cmd types.Cmd, createNSList []ns.NSType, enterNSList []ns.Namespace) (*Process, error) { process := &Process{ Token: token, @@ -155,14 +156,15 @@ func prepareAndStartShim(sandbox *Sandbox, shim shim, cid, token, url string, cm } shimParams := ShimParams{ - Container: cid, - Token: token, - URL: url, - Console: cmd.Console, - Terminal: cmd.Interactive, - Detach: cmd.Detach, - CreateNS: createNSList, - EnterNS: enterNSList, + Container: cid, + Token: token, + URL: url, + Console: cmd.Console, + Terminal: cmd.Interactive, + Detach: cmd.Detach, + CreateNS: createNSList, + EnterNS: enterNSList, + ConsoleURL: consoleURL, } pid, err := shim.start(sandbox, shimParams)