mirror of
https://github.com/openfaas/faasd.git
synced 2025-06-08 16:06:47 +00:00
Upgrades to go-execute/v2 and updates various other dependencies. Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
109 lines
2.0 KiB
Go
109 lines
2.0 KiB
Go
package systemd
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"text/template"
|
|
|
|
execute "github.com/alexellis/go-execute/v2"
|
|
)
|
|
|
|
func Enable(unit string) error {
|
|
task := execute.ExecTask{
|
|
Command: "systemctl",
|
|
Args: []string{"enable", unit},
|
|
StreamStdio: false,
|
|
}
|
|
|
|
res, err := task.Execute(context.Background())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if res.ExitCode != 0 {
|
|
return fmt.Errorf("error executing task %s %v, stderr: %s", task.Command, task.Args, res.Stderr)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func Start(unit string) error {
|
|
task := execute.ExecTask{
|
|
Command: "systemctl",
|
|
Args: []string{"start", unit},
|
|
StreamStdio: false,
|
|
}
|
|
|
|
res, err := task.Execute(context.Background())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if res.ExitCode != 0 {
|
|
return fmt.Errorf("error executing task %s %v, stderr: %s", task.Command, task.Args, res.Stderr)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func DaemonReload() error {
|
|
task := execute.ExecTask{
|
|
Command: "systemctl",
|
|
Args: []string{"daemon-reload"},
|
|
StreamStdio: false,
|
|
}
|
|
|
|
res, err := task.Execute(context.Background())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if res.ExitCode != 0 {
|
|
return fmt.Errorf("error executing task %s %v, stderr: %s", task.Command, task.Args, res.Stderr)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func InstallUnit(name string, tokens map[string]string) error {
|
|
if len(tokens["Cwd"]) == 0 {
|
|
return fmt.Errorf("key Cwd expected in tokens parameter")
|
|
}
|
|
|
|
tmplName := "./hack/" + name + ".service"
|
|
tmpl, err := template.ParseFiles(tmplName)
|
|
if err != nil {
|
|
return fmt.Errorf("error loading template %s, error %s", tmplName, err)
|
|
}
|
|
|
|
var tpl bytes.Buffer
|
|
|
|
if err := tmpl.Execute(&tpl, tokens); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := writeUnit(name+".service", tpl.Bytes()); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func writeUnit(name string, data []byte) error {
|
|
f, err := os.Create(filepath.Join("/lib/systemd/system", name))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer f.Close()
|
|
|
|
if _, err := f.Write(data); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|