Merge pull request #11315 from vrothberg/fix-11304

generate systemd: use --cidfile again
This commit is contained in:
OpenShift Merge Robot
2021-08-24 13:10:45 -04:00
committed by GitHub
7 changed files with 109 additions and 84 deletions

View File

@ -8,9 +8,9 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
) )
// minTimeoutStopSec is the minimal stop timeout for generated systemd units // minTimeoutStopSec is the minimal stop timeout for generated systemd units.
// without --new. Once exceeded, processes of the services are killed and the // Once exceeded, processes of the services are killed and the cgroup(s) are
// cgroup(s) are cleaned up. // cleaned up.
const minTimeoutStopSec = 60 const minTimeoutStopSec = 60
// validateRestartPolicy checks that the user-provided policy is valid. // validateRestartPolicy checks that the user-provided policy is valid.
@ -71,11 +71,12 @@ func filterCommonContainerFlags(command []string, argCount int) []string {
case s == "--rm": case s == "--rm":
// Boolean flags support --flag and --flag={true,false}. // Boolean flags support --flag and --flag={true,false}.
continue continue
case s == "--sdnotify", s == "--cgroups": case s == "--sdnotify", s == "--cgroups", s == "--cidfile":
i++ i++
continue continue
case strings.HasPrefix(s, "--rm="), case strings.HasPrefix(s, "--rm="),
strings.HasPrefix(s, "--cgroups="): strings.HasPrefix(s, "--cgroups="),
strings.HasPrefix(s, "--cidfile="):
continue continue
} }
processed = append(processed, s) processed = append(processed, s)

View File

@ -103,12 +103,12 @@ func TestFilterCommonContainerFlags(t *testing.T) {
}, },
{ {
[]string{"podman", "run", "--cidfile", "foo", "alpine"}, []string{"podman", "run", "--cidfile", "foo", "alpine"},
[]string{"podman", "run", "--cidfile", "foo", "alpine"}, []string{"podman", "run", "alpine"},
1, 1,
}, },
{ {
[]string{"podman", "run", "--cidfile=foo", "alpine"}, []string{"podman", "run", "--cidfile=foo", "alpine"},
[]string{"podman", "run", "--cidfile=foo", "alpine"}, []string{"podman", "run", "alpine"},
1, 1,
}, },
{ {

View File

@ -16,7 +16,6 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"golang.org/x/sys/unix"
) )
// containerInfo contains data required for generating a container's systemd // containerInfo contains data required for generating a container's systemd
@ -33,8 +32,6 @@ type containerInfo struct {
// StopTimeout sets the timeout Podman waits before killing the container // StopTimeout sets the timeout Podman waits before killing the container
// during service stop. // during service stop.
StopTimeout uint StopTimeout uint
// KillSignal of the container.
KillSignal string
// RestartPolicy of the systemd unit (e.g., no, on-failure, always). // RestartPolicy of the systemd unit (e.g., no, on-failure, always).
RestartPolicy string RestartPolicy string
// PIDFile of the service. Required for forking services. Must point to the // PIDFile of the service. Required for forking services. Must point to the
@ -105,9 +102,6 @@ Environment={{{{- range $index, $value := .ExtraEnvs -}}}}{{{{if $index}}}} {{{{
{{{{- end}}}} {{{{- end}}}}
Restart={{{{.RestartPolicy}}}} Restart={{{{.RestartPolicy}}}}
TimeoutStopSec={{{{.TimeoutStopSec}}}} TimeoutStopSec={{{{.TimeoutStopSec}}}}
{{{{- if .KillSignal}}}}
KillSignal={{{{.KillSignal}}}}
{{{{- end}}}}
{{{{- if .ExecStartPre}}}} {{{{- if .ExecStartPre}}}}
ExecStartPre={{{{.ExecStartPre}}}} ExecStartPre={{{{.ExecStartPre}}}}
{{{{- end}}}} {{{{- end}}}}
@ -190,13 +184,6 @@ func generateContainerInfo(ctr *libpod.Container, options entities.GenerateSyste
containerEnv: envs, containerEnv: envs,
} }
// Set a custom kill signal for non SIGTERM (already default in
// systemd) signals.
stopSignal := ctr.StopSignal()
if stopSignal != uint(unix.SIGTERM) {
info.KillSignal = fmt.Sprintf("%d", stopSignal)
}
return &info, nil return &info, nil
} }
@ -246,9 +233,10 @@ func executeContainerTemplate(info *containerInfo, options entities.GenerateSyst
info.Type = "notify" info.Type = "notify"
info.NotifyAccess = "all" info.NotifyAccess = "all"
info.PIDFile = "" info.PIDFile = ""
info.ContainerIDFile = "" info.ContainerIDFile = "%t/%n.ctr-id"
info.ExecStop = "" info.ExecStartPre = "/bin/rm -f {{{{.ContainerIDFile}}}}"
info.ExecStopPost = "" info.ExecStop = "{{{{.Executable}}}} stop --ignore --cidfile={{{{.ContainerIDFile}}}}"
info.ExecStopPost = "{{{{.Executable}}}} rm -f --ignore --cidfile={{{{.ContainerIDFile}}}}"
// The create command must at least have three arguments: // The create command must at least have three arguments:
// /usr/bin/podman run $IMAGE // /usr/bin/podman run $IMAGE
index := 0 index := 0
@ -271,6 +259,7 @@ func executeContainerTemplate(info *containerInfo, options entities.GenerateSyst
} }
startCommand = append(startCommand, startCommand = append(startCommand,
"run", "run",
"--cidfile={{{{.ContainerIDFile}}}}",
"--cgroups=no-conmon", "--cgroups=no-conmon",
"--rm", "--rm",
) )
@ -372,15 +361,7 @@ func executeContainerTemplate(info *containerInfo, options entities.GenerateSyst
info.ExecStart = strings.Join(startCommand, " ") info.ExecStart = strings.Join(startCommand, " ")
} }
info.TimeoutStopSec = info.StopTimeout info.TimeoutStopSec = minTimeoutStopSec + info.StopTimeout
// For units without --new add an additional 60 seconds to the stop
// timeout to make sure that Podman stop has enough time to properly
// shutdown and cleanup the container before systemd starts to nuke
// everything in the cgroup.
if !options.New {
info.TimeoutStopSec += minTimeoutStopSec
}
if info.PodmanVersion == "" { if info.PodmanVersion == "" {
info.PodmanVersion = version.Version.String() info.PodmanVersion = version.Version.String()

View File

@ -129,8 +129,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman container run --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space" ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space"
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -151,8 +154,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman container run --cgroups=no-conmon --rm -d --replace --sdnotify=container --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space" ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm -d --replace --sdnotify=container --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space"
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -173,8 +179,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -195,8 +204,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -217,8 +229,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon --replace --detach --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon --replace --detach --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -239,8 +254,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -262,10 +280,13 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=42 TimeoutStopSec=102
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon ` + ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon ` +
detachparam + detachparam +
` awesome-image:latest ` awesome-image:latest
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -288,8 +309,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=42 TimeoutStopSec=102
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test -p 80:80 awesome-image:latest somecmd --detach=false ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test -p 80:80 awesome-image:latest somecmd --detach=false
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -310,8 +334,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=42 TimeoutStopSec=102
ExecStart=/usr/bin/podman --events-backend none --runroot /root run --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman --events-backend none --runroot /root run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -332,8 +359,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman container run --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -354,8 +384,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test --log-driver=journald --log-opt=tag={{.Name}} awesome-image:latest ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test --log-driver=journald --log-opt=tag={{.Name}} awesome-image:latest
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -376,8 +409,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test awesome-image:latest sh -c "kill $$$$ && echo %%\\" ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test awesome-image:latest sh -c "kill $$$$ && echo %%\\"
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -398,8 +434,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon -d --conmon-pidfile=foo --cidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo alpine ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --conmon-pidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo alpine
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -420,8 +459,11 @@ RequiresMountsFor=/var/run/containers/storage
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon -d --conmon-pidfile=foo --cidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo --pod-id-file /tmp/pod-foobar.pod-id-file alpine ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon -d --conmon-pidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo --pod-id-file /tmp/pod-foobar.pod-id-file alpine
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
@ -443,8 +485,11 @@ RequiresMountsFor=/var/run/containers/storage
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Environment=FOO=abc "BAR=my test" USER=%%a Environment=FOO=abc "BAR=my test" USER=%%a
Restart=always Restart=always
TimeoutStopSec=10 TimeoutStopSec=70
ExecStart=/usr/bin/podman run --cgroups=no-conmon --rm --sdnotify=conmon -d --env FOO --env=BAR --env=MYENV=2 -e USER awesome-image:latest ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --env FOO --env=BAR --env=MYENV=2 -e USER awesome-image:latest
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all

View File

@ -323,7 +323,7 @@ func executePodTemplate(info *podInfo, options entities.GenerateSystemdOptions)
info.ExecStop = "{{{{.Executable}}}} {{{{if .RootFlags}}}}{{{{ .RootFlags}}}} {{{{end}}}}pod stop --ignore --pod-id-file {{{{.PodIDFile}}}} {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}}" info.ExecStop = "{{{{.Executable}}}} {{{{if .RootFlags}}}}{{{{ .RootFlags}}}} {{{{end}}}}pod stop --ignore --pod-id-file {{{{.PodIDFile}}}} {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}}"
info.ExecStopPost = "{{{{.Executable}}}} {{{{if .RootFlags}}}}{{{{ .RootFlags}}}} {{{{end}}}}pod rm --ignore -f --pod-id-file {{{{.PodIDFile}}}}" info.ExecStopPost = "{{{{.Executable}}}} {{{{if .RootFlags}}}}{{{{ .RootFlags}}}} {{{{end}}}}pod rm --ignore -f --pod-id-file {{{{.PodIDFile}}}}"
} }
info.TimeoutStopSec = info.StopTimeout info.TimeoutStopSec = minTimeoutStopSec + info.StopTimeout
if info.PodmanVersion == "" { if info.PodmanVersion == "" {
info.PodmanVersion = version.Version.String() info.PodmanVersion = version.Version.String()

View File

@ -54,7 +54,7 @@ Before=container-1.service container-2.service
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always Restart=always
TimeoutStopSec=42 TimeoutStopSec=102
ExecStart=/usr/bin/podman start jadda-jadda-infra ExecStart=/usr/bin/podman start jadda-jadda-infra
ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
@ -82,7 +82,7 @@ Before=container-1.service container-2.service
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure Restart=on-failure
TimeoutStopSec=10 TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo "bar=arg with space" --replace ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo "bar=arg with space" --replace
ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id
@ -110,7 +110,7 @@ Before=container-1.service container-2.service
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure Restart=on-failure
TimeoutStopSec=10 TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
ExecStartPre=/usr/bin/podman --events-backend none --runroot /root pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo "bar=arg with space" --replace ExecStartPre=/usr/bin/podman --events-backend none --runroot /root pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo "bar=arg with space" --replace
ExecStart=/usr/bin/podman --events-backend none --runroot /root pod start --pod-id-file %t/pod-123abc.pod-id ExecStart=/usr/bin/podman --events-backend none --runroot /root pod start --pod-id-file %t/pod-123abc.pod-id
@ -138,7 +138,7 @@ Before=container-1.service container-2.service
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure Restart=on-failure
TimeoutStopSec=10 TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo --replace ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo --replace
ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id
@ -166,7 +166,7 @@ Before=container-1.service container-2.service
[Service] [Service]
Environment=PODMAN_SYSTEMD_UNIT=%n Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure Restart=on-failure
TimeoutStopSec=10 TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo --label key={{someval}} --replace ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo --label key={{someval}} --replace
ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id

View File

@ -46,11 +46,20 @@ function service_setup() {
# Helper to stop a systemd service running a container # Helper to stop a systemd service running a container
function service_cleanup() { function service_cleanup() {
local status=$1
run systemctl stop "$SERVICE_NAME" run systemctl stop "$SERVICE_NAME"
if [ $status -ne 0 ]; then if [ $status -ne 0 ]; then
die "Error stopping systemd unit $SERVICE_NAME, output: $output" die "Error stopping systemd unit $SERVICE_NAME, output: $output"
fi fi
if [[ -z "$status" ]]; then
run systemctl is-active "$SERVICE_NAME"
if [ $status -ne 0 ]; then
die "Error checking stauts of systemd unit $SERVICE_NAME, output: $output"
fi
is "$output" "$status" "$SERVICE_NAME not in expected state"
fi
rm -f "$UNIT_FILE" rm -f "$UNIT_FILE"
systemctl daemon-reload systemctl daemon-reload
} }
@ -60,7 +69,8 @@ function service_cleanup() {
@test "podman generate - systemd - basic" { @test "podman generate - systemd - basic" {
cname=$(random_string) cname=$(random_string)
# See #7407 for --pull=always. # See #7407 for --pull=always.
run_podman create --pull=always --name $cname --label "io.containers.autoupdate=registry" $IMAGE top run_podman create --pull=always --name $cname --label "io.containers.autoupdate=registry" $IMAGE \
sh -c "trap 'echo Received SIGTERM, finishing; exit' SIGTERM; echo WAITING; while :; do sleep 0.1; done"
# Start systemd service to run this container # Start systemd service to run this container
service_setup service_setup
@ -68,7 +78,7 @@ function service_cleanup() {
# Give container time to start; make sure output looks top-like # Give container time to start; make sure output looks top-like
sleep 2 sleep 2
run_podman logs $cname run_podman logs $cname
is "$output" ".*Load average:.*" "running container 'top'-like output" is "$output" ".*WAITING.*" "running is waiting for signal"
# Exercise `podman auto-update`. # Exercise `podman auto-update`.
# TODO: this will at least run auto-update code but won't perform an update # TODO: this will at least run auto-update code but won't perform an update
@ -77,7 +87,8 @@ function service_cleanup() {
run_podman auto-update run_podman auto-update
# All good. Stop service, clean up. # All good. Stop service, clean up.
service_cleanup # Also make sure the service is in the `inactive` state (see #11304).
service_cleanup inactive
} }
@test "podman autoupdate local" { @test "podman autoupdate local" {
@ -125,17 +136,4 @@ function service_cleanup() {
service_cleanup service_cleanup
} }
@test "podman generate systemd - stop-signal" {
cname=$(random_string)
run_podman create --name $cname --stop-signal=42 $IMAGE
run_podman generate systemd --new $cname
is "$output" ".*KillSignal=42.*" "KillSignal is set"
# Regression test for #11304: systemd wants a custom stop-signal.
run_podman rm -f $cname
run_podman create --name $cname --systemd=true $IMAGE systemd
run_podman generate systemd --new $cname
is "$output" ".*KillSignal=37.*" "KillSignal is set"
}
# vim: filetype=sh # vim: filetype=sh