summaryrefslogtreecommitdiff
path: root/pkg/systemdgen/systemdgen.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2019-05-02 22:33:09 +0200
committerGitHub <noreply@github.com>2019-05-02 22:33:09 +0200
commitb5e5585ada50a887f439e513c5deae30c89648de (patch)
tree795c9e94db4d51012f40ccd0287504d39a4de83b /pkg/systemdgen/systemdgen.go
parent6bcbb88715fd9cab45eb668bba5ba83228e16883 (diff)
parentc18ad2bfd9034fe6b80e3f33c076af731be6778b (diff)
downloadpodman-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.go43
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
+}