summaryrefslogtreecommitdiff
path: root/pkg/systemdgen/systemdgen.go
blob: 3d1c31b5d3e70a42c8e972dfb3166309caafe057 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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
}