diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-11-18 23:51:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-18 23:51:12 +0100 |
commit | 319d3fba6d86dff7b19c5315bbe3ba0b67a97c81 (patch) | |
tree | 0db6ef4e6ba9bcfd178017ea63d3c2989fbd6aa9 /pkg/specgenutil | |
parent | c26af00c4bf5aec458868b5afd44e7a88ddcf46d (diff) | |
parent | 0dae50f1d3af16e625ca7e2f272fb2ce63682c83 (diff) | |
download | podman-319d3fba6d86dff7b19c5315bbe3ba0b67a97c81.tar.gz podman-319d3fba6d86dff7b19c5315bbe3ba0b67a97c81.tar.bz2 podman-319d3fba6d86dff7b19c5315bbe3ba0b67a97c81.zip |
Merge pull request #12354 from Luap99/exit-command
Do not store the exit command in container config
Diffstat (limited to 'pkg/specgenutil')
-rw-r--r-- | pkg/specgenutil/util.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pkg/specgenutil/util.go b/pkg/specgenutil/util.go index 15676d086..b47082b7f 100644 --- a/pkg/specgenutil/util.go +++ b/pkg/specgenutil/util.go @@ -3,10 +3,13 @@ package specgenutil import ( "io/ioutil" "net" + "os" "strconv" "strings" + "github.com/containers/common/pkg/config" "github.com/containers/podman/v3/libpod/network/types" + storageTypes "github.com/containers/storage/types" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -272,3 +275,54 @@ func parseAndValidatePort(port string) (uint16, error) { } return uint16(num), nil } + +func CreateExitCommandArgs(storageConfig storageTypes.StoreOptions, config *config.Config, syslog, rm, exec bool) ([]string, error) { + // We need a cleanup process for containers in the current model. + // But we can't assume that the caller is Podman - it could be another + // user of the API. + // As such, provide a way to specify a path to Podman, so we can + // still invoke a cleanup process. + + podmanPath, err := os.Executable() + if err != nil { + return nil, err + } + + command := []string{podmanPath, + "--root", storageConfig.GraphRoot, + "--runroot", storageConfig.RunRoot, + "--log-level", logrus.GetLevel().String(), + "--cgroup-manager", config.Engine.CgroupManager, + "--tmpdir", config.Engine.TmpDir, + "--cni-config-dir", config.Network.NetworkConfigDir, + } + if config.Engine.OCIRuntime != "" { + command = append(command, []string{"--runtime", config.Engine.OCIRuntime}...) + } + if storageConfig.GraphDriverName != "" { + command = append(command, []string{"--storage-driver", storageConfig.GraphDriverName}...) + } + for _, opt := range storageConfig.GraphDriverOptions { + command = append(command, []string{"--storage-opt", opt}...) + } + if config.Engine.EventsLogger != "" { + command = append(command, []string{"--events-backend", config.Engine.EventsLogger}...) + } + + if syslog { + command = append(command, "--syslog") + } + command = append(command, []string{"container", "cleanup"}...) + + if rm { + command = append(command, "--rm") + } + + // This has to be absolutely last, to ensure that the exec session ID + // will be added after it by Libpod. + if exec { + command = append(command, "--exec") + } + + return command, nil +} |