diff options
author | Giuseppe Scrivano <gscrivan@redhat.com> | 2018-03-26 20:09:10 +0200 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-03-29 01:34:41 +0000 |
commit | f936b745b66de3cbbdf924a26bb35766afe5acba (patch) | |
tree | b96c47ea63b428f0a7eecf82313e3426eabd3ab1 | |
parent | ecda694a92242e6e6921d42b52847bb909eb8051 (diff) | |
download | podman-f936b745b66de3cbbdf924a26bb35766afe5acba.tar.gz podman-f936b745b66de3cbbdf924a26bb35766afe5acba.tar.bz2 podman-f936b745b66de3cbbdf924a26bb35766afe5acba.zip |
podman: new option --conmon-pidfile=
so that it is possible to use systemd to automatically restart the
container:
[Service]
Type=forking
PIDFile=/run/awesome-service.pid
ExecStart=/usr/bin/podman run --conmon-pidfile=/run/awesome-service.pid --name awesome -d IMAGE /usr/bin/do-something
ExecStopPost=/usr/bin/podman rm awesome
Restart=always
Closes: https://github.com/projectatomic/libpod/issues/534
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Closes: #549
Approved by: rhatdan
-rw-r--r-- | cmd/podman/common.go | 4 | ||||
-rw-r--r-- | cmd/podman/create.go | 3 | ||||
-rw-r--r-- | cmd/podman/run.go | 1 | ||||
-rw-r--r-- | libpod/container.go | 2 | ||||
-rw-r--r-- | libpod/oci.go | 3 | ||||
-rw-r--r-- | libpod/options.go | 11 |
6 files changed, 24 insertions, 0 deletions
diff --git a/cmd/podman/common.go b/cmd/podman/common.go index 93de80e29..755285c95 100644 --- a/cmd/podman/common.go +++ b/cmd/podman/common.go @@ -101,6 +101,10 @@ var createFlags = []cli.Flag{ Name: "cidfile", Usage: "Write the container ID to the file", }, + cli.StringFlag{ + Name: "conmon-pidfile", + Usage: "path to the file that will receive the PID of conmon", + }, cli.Uint64Flag{ Name: "cpu-period", Usage: "Limit the CPU CFS (Completely Fair Scheduler) period", diff --git a/cmd/podman/create.go b/cmd/podman/create.go index 8f9e82805..c1fb15bcf 100644 --- a/cmd/podman/create.go +++ b/cmd/podman/create.go @@ -74,6 +74,7 @@ type createConfig struct { CapAdd []string // cap-add CapDrop []string // cap-drop CidFile string + ConmonPidFile string CgroupParent string // cgroup-parent Command []string Detach bool // detach @@ -201,6 +202,7 @@ func createCmd(c *cli.Context) error { // Gather up the options for NewContainer which consist of With... funcs options = append(options, libpod.WithRootFSFromImage(createConfig.ImageID, createConfig.Image, useImageVolumes)) options = append(options, libpod.WithSELinuxLabels(createConfig.ProcessLabel, createConfig.MountLabel)) + options = append(options, libpod.WithConmonPidFile(createConfig.ConmonPidFile)) options = append(options, libpod.WithLabels(createConfig.Labels)) options = append(options, libpod.WithUser(createConfig.User)) options = append(options, libpod.WithShmDir(createConfig.ShmDir)) @@ -611,6 +613,7 @@ func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime, imageName string, config := &createConfig{ Runtime: runtime, BuiltinImgVolumes: ImageVolumes, + ConmonPidFile: c.String("conmon-pidfile"), ImageVolumeType: c.String("image-volume"), CapAdd: c.StringSlice("cap-add"), CapDrop: c.StringSlice("cap-drop"), diff --git a/cmd/podman/run.go b/cmd/podman/run.go index 21320f57c..10f68e9da 100644 --- a/cmd/podman/run.go +++ b/cmd/podman/run.go @@ -84,6 +84,7 @@ func runCmd(c *cli.Context) error { // Gather up the options for NewContainer which consist of With... funcs options = append(options, libpod.WithRootFSFromImage(createConfig.ImageID, createConfig.Image, useImageVolumes)) options = append(options, libpod.WithSELinuxLabels(createConfig.ProcessLabel, createConfig.MountLabel)) + options = append(options, libpod.WithConmonPidFile(createConfig.ConmonPidFile)) options = append(options, libpod.WithLabels(createConfig.Labels)) options = append(options, libpod.WithUser(createConfig.User)) options = append(options, libpod.WithShmDir(createConfig.ShmDir)) diff --git a/libpod/container.go b/libpod/container.go index c2b07eb3f..965ac67fe 100644 --- a/libpod/container.go +++ b/libpod/container.go @@ -251,6 +251,8 @@ type ContainerConfig struct { CgroupParent string `json:"cgroupParent"` // LogPath log location LogPath string `json:"logPath"` + // File containing the conmon PID + ConmonPidFile string `json:"conmonPidFile,omitempty"` // TODO log options for log drivers } diff --git a/libpod/oci.go b/libpod/oci.go index 2ea3317d6..049d0817b 100644 --- a/libpod/oci.go +++ b/libpod/oci.go @@ -212,6 +212,9 @@ func (r *OCIRuntime) createContainer(ctr *Container, cgroupParent string) (err e args = append(args, "-p", filepath.Join(ctr.state.RunDir, "pidfile")) args = append(args, "-l", ctr.LogPath()) args = append(args, "--exit-dir", r.exitsDir) + if ctr.config.ConmonPidFile != "" { + args = append(args, "--conmon-pidfile", ctr.config.ConmonPidFile) + } args = append(args, "--socket-dir-path", r.socketsDir) if ctr.config.Spec.Process.Terminal { args = append(args, "-t") diff --git a/libpod/options.go b/libpod/options.go index 7cbe9afb4..987a37429 100644 --- a/libpod/options.go +++ b/libpod/options.go @@ -766,3 +766,14 @@ func WithHosts(hosts []string) CtrCreateOption { return nil } } + +// WithConmonPidFile specifies the path to the file that receives the pid of conmon +func WithConmonPidFile(path string) CtrCreateOption { + return func(ctr *Container) error { + if ctr.valid { + return ErrCtrFinalized + } + ctr.config.ConmonPidFile = path + return nil + } +} |