Add option for adding arguments

This commit is contained in:
Justin Hawkins 2022-11-25 18:10:30 +10:30
parent c15e9feb66
commit 669f269dd3
2 changed files with 28 additions and 4 deletions

View File

@ -5,7 +5,7 @@ Description={{ .description }}
[Service] [Service]
WorkingDirectory={{ .workingDirectory }} WorkingDirectory={{ .workingDirectory }}
ExecStart={{ .execStart }} ExecStart={{ .execStart }} {{ .execStartArgs }}
[Install] [Install]
WantedBy=default.target WantedBy=default.target

View File

@ -4,6 +4,7 @@ package unitard
import ( import (
"embed" "embed"
"errors"
"fmt" "fmt"
"io" "io"
"os" "os"
@ -21,12 +22,31 @@ type Unit struct {
name string name string
binary string binary string
binaryPath string binaryPath string
binaryArgs string
systemCtlPath string // path to systemctl command systemCtlPath string // path to systemctl command
unitFilePath string unitFilePath string
} }
type UnitOpts interface{} type UnitOpts interface {
Apply(u *Unit) error
}
// OptProgramArgs allows you to add an arguments to the invocation of the program
type OptProgramArgs struct {
Args string // Program args
}
func (o OptProgramArgs) Apply(u *Unit) error {
if o.Args == "" {
return errors.New("can't set an empty args option")
}
if u.binaryArgs != "" {
return errors.New("args were already set - use OptProgramArgs only once")
}
u.binaryArgs = o.Args
return nil
}
// NewUnit creates a new systemd unit representation, with a particular name. // NewUnit creates a new systemd unit representation, with a particular name.
// No changes will be made to the system configuration until Deploy or Undeploy // No changes will be made to the system configuration until Deploy or Undeploy
@ -46,8 +66,11 @@ func NewUnit(unitName string, unitOpts ...UnitOpts) (Unit, error) {
binaryPath: path, binaryPath: path,
} }
if len(unitOpts) > 0 { for _, opt := range unitOpts {
return Unit{}, fmt.Errorf("sorry, UnitOpts are not yet supported") err := opt.Apply(&u)
if err != nil {
return Unit{}, fmt.Errorf("bad option: %s", err)
}
} }
err := u.setupEnvironment() err := u.setupEnvironment()
@ -97,6 +120,7 @@ func (u Unit) writeTemplate(f io.Writer) error {
data := map[string]string{ data := map[string]string{
"description": u.name, "description": u.name,
"execStart": u.binary, "execStart": u.binary,
"execStartArgs": u.binaryArgs,
"workingDirectory": u.binaryPath, "workingDirectory": u.binaryPath,
} }
err = t.ExecuteTemplate(f, "basic.service", data) err = t.ExecuteTemplate(f, "basic.service", data)