diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2019-05-02 22:33:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-02 22:33:09 +0200 |
commit | b5e5585ada50a887f439e513c5deae30c89648de (patch) | |
tree | 795c9e94db4d51012f40ccd0287504d39a4de83b /pkg/systemdgen/systemdgen.go | |
parent | 6bcbb88715fd9cab45eb668bba5ba83228e16883 (diff) | |
parent | c18ad2bfd9034fe6b80e3f33c076af731be6778b (diff) | |
download | podman-b5e5585ada50a887f439e513c5deae30c89648de.tar.gz podman-b5e5585ada50a887f439e513c5deae30c89648de.tar.bz2 podman-b5e5585ada50a887f439e513c5deae30c89648de.zip |
Merge pull request #2985 from baude/generatesystemd
Generate Systemd
Diffstat (limited to 'pkg/systemdgen/systemdgen.go')
-rw-r--r-- | pkg/systemdgen/systemdgen.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/pkg/systemdgen/systemdgen.go b/pkg/systemdgen/systemdgen.go new file mode 100644 index 000000000..3d1c31b5d --- /dev/null +++ b/pkg/systemdgen/systemdgen.go @@ -0,0 +1,43 @@ +package systemdgen + +import ( + "fmt" + "path/filepath" + + "github.com/pkg/errors" +) + +var template = `[Unit] +Description=%s Podman Container +[Service] +Restart=%s +ExecStart=/usr/bin/podman start %s +ExecStop=/usr/bin/podman stop -t %d %s +KillMode=none +Type=forking +PIDFile=%s +[Install] +WantedBy=multi-user.target` + +var restartPolicies = []string{"no", "on-success", "on-failure", "on-abnormal", "on-watchdog", "on-abort", "always"} + +// ValidateRestartPolicy checks that the user-provided policy is valid +func ValidateRestartPolicy(restart string) error { + for _, i := range restartPolicies { + if i == restart { + return nil + } + } + return errors.Errorf("%s is not a valid restart policy", restart) +} + +// CreateSystemdUnitAsString takes variables to create a systemd unit file used to control +// a libpod container +func CreateSystemdUnitAsString(name, cid, restart, pidPath string, stopTimeout int) (string, error) { + if err := ValidateRestartPolicy(restart); err != nil { + return "", err + } + pidFile := filepath.Join(pidPath, fmt.Sprintf("%s.pid", cid)) + unit := fmt.Sprintf(template, name, restart, name, stopTimeout, name, pidFile) + return unit, nil +} |