add vault, consul-template, arvados pkgs
[arvados.git] / services / boot / systemd.go
1 package main
2
3 import (
4         "context"
5         "fmt"
6         "os/exec"
7 )
8
9 type systemdUnit struct {
10         name string
11         cmd  string
12         args []string
13 }
14
15 func (u *systemdUnit) Start(ctx context.Context) error {
16         cmd := command("systemd-run", append([]string{"--unit=arvados-" + u.name, u.cmd}, u.args...)...)
17         err := cmd.Run()
18         if err != nil {
19                 err = fmt.Errorf("systemd-run: %s", err)
20         }
21         return err
22 }
23
24 func (u *systemdUnit) Running(ctx context.Context) (bool, error) {
25         return runStatusCmd("systemctl", "status", "arvados-"+u.name)
26 }
27
28 func runStatusCmd(prog string, args ...string) (bool, error) {
29         cmd := command(prog, args...)
30         err := cmd.Run()
31         switch err.(type) {
32         case *exec.ExitError:
33                 return false, nil
34         case nil:
35                 return true, nil
36         default:
37                 return false, err
38         }
39 }