diff options
author | Joseph Gooch <mrwizard@dok.org> | 2020-06-19 13:29:34 +0000 |
---|---|---|
committer | Joseph Gooch <mrwizard@dok.org> | 2020-07-06 17:47:18 +0000 |
commit | 0b1c1ef461d26b3c373269c3a2e7085124f89eb5 (patch) | |
tree | a49986c0b0c35bf161d8dea0c05b32d7b630016e /libpod/options.go | |
parent | 9532509c50113ac9470108e3492e2769bac533e8 (diff) | |
download | podman-0b1c1ef461d26b3c373269c3a2e7085124f89eb5.tar.gz podman-0b1c1ef461d26b3c373269c3a2e7085124f89eb5.tar.bz2 podman-0b1c1ef461d26b3c373269c3a2e7085124f89eb5.zip |
Implement --sdnotify cmdline option to control sd-notify behavior
--sdnotify container|conmon|ignore
With "conmon", we send the MAINPID, and clear the NOTIFY_SOCKET so the OCI
runtime doesn't pass it into the container. We also advertise "ready" when the
OCI runtime finishes to advertise the service as ready.
With "container", we send the MAINPID, and leave the NOTIFY_SOCKET so the OCI
runtime passes it into the container for initialization, and let the container advertise further metadata.
This is the default, which is closest to the behavior podman has done in the past.
The "ignore" option removes NOTIFY_SOCKET from the environment, so neither podman nor
any child processes will talk to systemd.
This removes the need for hardcoded CID and PID files in the command line, and
the PIDFile directive, as the pid is advertised directly through sd-notify.
Signed-off-by: Joseph Gooch <mrwizard@dok.org>
Diffstat (limited to 'libpod/options.go')
-rw-r--r-- | libpod/options.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libpod/options.go b/libpod/options.go index c1a8fdbe1..61d1676f1 100644 --- a/libpod/options.go +++ b/libpod/options.go @@ -4,6 +4,7 @@ import ( "net" "os" "path/filepath" + "strings" "syscall" "github.com/containers/common/pkg/config" @@ -22,6 +23,10 @@ import ( ) // Runtime Creation Options +var ( + // SdNotifyModeValues describes the only values that SdNotifyMode can be + SdNotifyModeValues = []string{define.SdNotifyModeContainer, define.SdNotifyModeConmon, define.SdNotifyModeIgnore} +) // WithStorageConfig uses the given configuration to set up container storage. // If this is not specified, the system default configuration will be used @@ -550,6 +555,23 @@ func WithSystemd() CtrCreateOption { } } +// WithSdNotifyMode sets the sd-notify method +func WithSdNotifyMode(mode string) CtrCreateOption { + return func(ctr *Container) error { + if ctr.valid { + return define.ErrCtrFinalized + } + + // verify values + if len(mode) > 0 && !util.StringInSlice(strings.ToLower(mode), SdNotifyModeValues) { + return errors.Wrapf(define.ErrInvalidArg, "--sdnotify values must be one of %q", strings.Join(SdNotifyModeValues, ", ")) + } + + ctr.config.SdNotifyMode = mode + return nil + } +} + // WithShmSize sets the size of /dev/shm tmpfs mount. func WithShmSize(size int64) CtrCreateOption { return func(ctr *Container) error { |