mirror of https://github.com/containers/podman.git
Add SystemdMode to inspect for containers
This allows us to determine if the container auto-detected that systemd was in use, and correctly activated systemd integration. Use this to wire up some integration tests to verify that systemd integration is working properly. Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:
parent
dc2ca45d75
commit
05988fc74f
|
@ -289,6 +289,7 @@ func (c *Container) generateInspectContainerConfig(spec *spec.Spec) *define.Insp
|
||||||
|
|
||||||
ctrConfig.OpenStdin = c.config.Stdin
|
ctrConfig.OpenStdin = c.config.Stdin
|
||||||
ctrConfig.Image = c.config.RootfsImageName
|
ctrConfig.Image = c.config.RootfsImageName
|
||||||
|
ctrConfig.SystemdMode = c.config.Systemd
|
||||||
|
|
||||||
// Leave empty is not explicitly overwritten by user
|
// Leave empty is not explicitly overwritten by user
|
||||||
if len(c.config.Command) != 0 {
|
if len(c.config.Command) != 0 {
|
||||||
|
|
|
@ -57,6 +57,10 @@ type InspectContainerConfig struct {
|
||||||
// Timezone is the timezone inside the container.
|
// Timezone is the timezone inside the container.
|
||||||
// Local means it has the same timezone as the host machine
|
// Local means it has the same timezone as the host machine
|
||||||
Timezone string `json:"Timezone,omitempty"`
|
Timezone string `json:"Timezone,omitempty"`
|
||||||
|
// SystemdMode is whether the container is running in systemd mode. In
|
||||||
|
// systemd mode, the container configuration is customized to optimize
|
||||||
|
// running systemd in the container.
|
||||||
|
SystemdMode bool `json:"SystemdMode,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// InspectRestartPolicy holds information about the container's restart policy.
|
// InspectRestartPolicy holds information about the container's restart policy.
|
||||||
|
@ -631,3 +635,56 @@ type InspectContainerData struct {
|
||||||
Config *InspectContainerConfig `json:"Config"`
|
Config *InspectContainerConfig `json:"Config"`
|
||||||
HostConfig *InspectContainerHostConfig `json:"HostConfig"`
|
HostConfig *InspectContainerHostConfig `json:"HostConfig"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InspectExecSession contains information about a given exec session.
|
||||||
|
type InspectExecSession struct {
|
||||||
|
// CanRemove is legacy and used purely for compatibility reasons.
|
||||||
|
// Will always be set to true, unless the exec session is running.
|
||||||
|
CanRemove bool `json:"CanRemove"`
|
||||||
|
// ContainerID is the ID of the container this exec session is attached
|
||||||
|
// to.
|
||||||
|
ContainerID string `json:"ContainerID"`
|
||||||
|
// DetachKeys are the detach keys used by the exec session.
|
||||||
|
// If set to "" the default keys are being used.
|
||||||
|
// Will show "<none>" if no detach keys are set.
|
||||||
|
DetachKeys string `json:"DetachKeys"`
|
||||||
|
// ExitCode is the exit code of the exec session. Will be set to 0 if
|
||||||
|
// the exec session has not yet exited.
|
||||||
|
ExitCode int `json:"ExitCode"`
|
||||||
|
// ID is the ID of the exec session.
|
||||||
|
ID string `json:"ID"`
|
||||||
|
// OpenStderr is whether the container's STDERR stream will be attached.
|
||||||
|
// Always set to true if the exec session created a TTY.
|
||||||
|
OpenStderr bool `json:"OpenStderr"`
|
||||||
|
// OpenStdin is whether the container's STDIN stream will be attached
|
||||||
|
// to.
|
||||||
|
OpenStdin bool `json:"OpenStdin"`
|
||||||
|
// OpenStdout is whether the container's STDOUT stream will be attached.
|
||||||
|
// Always set to true if the exec session created a TTY.
|
||||||
|
OpenStdout bool `json:"OpenStdout"`
|
||||||
|
// Running is whether the exec session is running.
|
||||||
|
Running bool `json:"Running"`
|
||||||
|
// Pid is the PID of the exec session's process.
|
||||||
|
// Will be set to 0 if the exec session is not running.
|
||||||
|
Pid int `json:"Pid"`
|
||||||
|
// ProcessConfig contains information about the exec session's process.
|
||||||
|
ProcessConfig *InspectExecProcess `json:"ProcessConfig"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// InspectExecProcess contains information about the process in a given exec
|
||||||
|
// session.
|
||||||
|
type InspectExecProcess struct {
|
||||||
|
// Arguments are the arguments to the entrypoint command of the exec
|
||||||
|
// session.
|
||||||
|
Arguments []string `json:"arguments"`
|
||||||
|
// Entrypoint is the entrypoint for the exec session (the command that
|
||||||
|
// will be executed in the container).
|
||||||
|
Entrypoint string `json:"entrypoint"`
|
||||||
|
// Privileged is whether the exec session will be started with elevated
|
||||||
|
// privileges.
|
||||||
|
Privileged bool `json:"privileged"`
|
||||||
|
// Tty is whether the exec session created a terminal.
|
||||||
|
Tty bool `json:"tty"`
|
||||||
|
// User is the user the exec session was started as.
|
||||||
|
User string `json:"user"`
|
||||||
|
}
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
package define
|
|
||||||
|
|
||||||
// InspectExecSession contains information about a given exec session.
|
|
||||||
type InspectExecSession struct {
|
|
||||||
// CanRemove is legacy and used purely for compatibility reasons.
|
|
||||||
// Will always be set to true, unless the exec session is running.
|
|
||||||
CanRemove bool `json:"CanRemove"`
|
|
||||||
// ContainerID is the ID of the container this exec session is attached
|
|
||||||
// to.
|
|
||||||
ContainerID string `json:"ContainerID"`
|
|
||||||
// DetachKeys are the detach keys used by the exec session.
|
|
||||||
// If set to "" the default keys are being used.
|
|
||||||
// Will show "<none>" if no detach keys are set.
|
|
||||||
DetachKeys string `json:"DetachKeys"`
|
|
||||||
// ExitCode is the exit code of the exec session. Will be set to 0 if
|
|
||||||
// the exec session has not yet exited.
|
|
||||||
ExitCode int `json:"ExitCode"`
|
|
||||||
// ID is the ID of the exec session.
|
|
||||||
ID string `json:"ID"`
|
|
||||||
// OpenStderr is whether the container's STDERR stream will be attached.
|
|
||||||
// Always set to true if the exec session created a TTY.
|
|
||||||
OpenStderr bool `json:"OpenStderr"`
|
|
||||||
// OpenStdin is whether the container's STDIN stream will be attached
|
|
||||||
// to.
|
|
||||||
OpenStdin bool `json:"OpenStdin"`
|
|
||||||
// OpenStdout is whether the container's STDOUT stream will be attached.
|
|
||||||
// Always set to true if the exec session created a TTY.
|
|
||||||
OpenStdout bool `json:"OpenStdout"`
|
|
||||||
// Running is whether the exec session is running.
|
|
||||||
Running bool `json:"Running"`
|
|
||||||
// Pid is the PID of the exec session's process.
|
|
||||||
// Will be set to 0 if the exec session is not running.
|
|
||||||
Pid int `json:"Pid"`
|
|
||||||
// ProcessConfig contains information about the exec session's process.
|
|
||||||
ProcessConfig *InspectExecProcess `json:"ProcessConfig"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// InspectExecProcess contains information about the process in a given exec
|
|
||||||
// session.
|
|
||||||
type InspectExecProcess struct {
|
|
||||||
// Arguments are the arguments to the entrypoint command of the exec
|
|
||||||
// session.
|
|
||||||
Arguments []string `json:"arguments"`
|
|
||||||
// Entrypoint is the entrypoint for the exec session (the command that
|
|
||||||
// will be executed in the container).
|
|
||||||
Entrypoint string `json:"entrypoint"`
|
|
||||||
// Privileged is whether the exec session will be started with elevated
|
|
||||||
// privileges.
|
|
||||||
Privileged bool `json:"privileged"`
|
|
||||||
// Tty is whether the exec session created a terminal.
|
|
||||||
Tty bool `json:"tty"`
|
|
||||||
// User is the user the exec session was started as.
|
|
||||||
User string `json:"user"`
|
|
||||||
}
|
|
|
@ -112,5 +112,40 @@ WantedBy=multi-user.target
|
||||||
systemctl.WaitWithDefaultTimeout()
|
systemctl.WaitWithDefaultTimeout()
|
||||||
Expect(systemctl.ExitCode()).To(Equal(0))
|
Expect(systemctl.ExitCode()).To(Equal(0))
|
||||||
Expect(strings.Contains(systemctl.OutputToString(), "State:")).To(BeTrue())
|
Expect(strings.Contains(systemctl.OutputToString(), "State:")).To(BeTrue())
|
||||||
|
|
||||||
|
result := podmanTest.Podman([]string{"inspect", ctrName})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result.ExitCode()).To(Equal(0))
|
||||||
|
conData := result.InspectContainerToJSON()
|
||||||
|
Expect(len(conData)).To(Equal(1))
|
||||||
|
Expect(conData[0].Config.SystemdMode).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman create container with systemd entrypoint triggers systemd mode", func() {
|
||||||
|
ctrName := "testCtr"
|
||||||
|
run := podmanTest.Podman([]string{"create", "--name", ctrName, "--entrypoint", "/sbin/init", ubi_init})
|
||||||
|
run.WaitWithDefaultTimeout()
|
||||||
|
Expect(run.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
result := podmanTest.Podman([]string{"inspect", ctrName})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result.ExitCode()).To(Equal(0))
|
||||||
|
conData := result.InspectContainerToJSON()
|
||||||
|
Expect(len(conData)).To(Equal(1))
|
||||||
|
Expect(conData[0].Config.SystemdMode).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman create container with systemd=always triggers systemd mode", func() {
|
||||||
|
ctrName := "testCtr"
|
||||||
|
run := podmanTest.Podman([]string{"create", "--name", ctrName, "--systemd", "always", ALPINE})
|
||||||
|
run.WaitWithDefaultTimeout()
|
||||||
|
Expect(run.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
result := podmanTest.Podman([]string{"inspect", ctrName})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result.ExitCode()).To(Equal(0))
|
||||||
|
conData := result.InspectContainerToJSON()
|
||||||
|
Expect(len(conData)).To(Equal(1))
|
||||||
|
Expect(conData[0].Config.SystemdMode).To(BeTrue())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue