diff --git a/errors.go b/errors.go index c385003..12a9278 100644 --- a/errors.go +++ b/errors.go @@ -14,4 +14,7 @@ var ( // ErrInsufficientPermissions means the calling executable was invoked without enough permissions to run the selected command ErrInsufficientPermissions = errors.New("insufficient permissions for action") + + // ErrDoesNotExist means the unit specified doesn't exist or can't be found + ErrDoesNotExist = errors.New("Unit does not exist") ) diff --git a/systemctl.go b/systemctl.go index 8c7e46f..5d4060d 100644 --- a/systemctl.go +++ b/systemctl.go @@ -1,68 +1,88 @@ package systemctl -import "context" +import ( + "context" + "errors" + "strconv" +) // TODO -func IsFailed(ctx context.Context, unit string) (bool, error) { +func IsFailed(ctx context.Context, unit string, usermode bool) (bool, error) { return false, nil } // TODO -func IsActive(ctx context.Context, unit string) (bool, error) { +func IsActive(ctx context.Context, unit string, usermode bool) (bool, error) { return false, nil } // TODO -func Status(ctx context.Context, unit string) (bool, error) { +func Status(ctx context.Context, unit string, usermode bool) (bool, error) { return false, nil } // TODO -func Restart(ctx context.Context, unit string) error { +func Restart(ctx context.Context, unit string, usermode bool) error { return nil } // TODO -func Start(ctx context.Context, unit string) error { +func Start(ctx context.Context, unit string, usermode bool) error { return nil } // TODO -func Stop(ctx context.Context, unit string) error { +func Stop(ctx context.Context, unit string, usermode bool) error { return nil } // TODO -func Enable(ctx context.Context, unit string) error { +func Enable(ctx context.Context, unit string, usermode bool) error { + var args = []string{"enable", "--system", unit} + if usermode { + args[1] = "--user" + } + _, stderr, code, err := execute(ctx, args) + + if err != nil { + return err + } + err = filterErr(stderr) + if err != nil { + return err + } + if code != 0 { + return errors.New("received error code " + strconv.Itoa(code)) + } return nil } // TODO -func Disable(ctx context.Context, unit string) error { +func Disable(ctx context.Context, unit string, usermode bool) error { return nil } // TODO -func IsEnabled(ctx context.Context, unit string) (bool, error) { +func IsEnabled(ctx context.Context, unit string, usermode bool) (bool, error) { return false, nil } // TODO -func DaemonReload(ctx context.Context, unit string) error { +func DaemonReload(ctx context.Context, unit string, usermode bool) error { return nil } //TODO -func Show(ctx context.Context, unit string, property string) (string, error) { +func Show(ctx context.Context, unit string, property string, usermode bool) (string, error) { return "", nil } //TODO -func Mask(ctx context.Context, unit string) error { +func Mask(ctx context.Context, unit string, usermode bool) error { return nil } -func Unmask(ctx context.Context, unit string) error { +func Unmask(ctx context.Context, unit string, usermode bool) error { return nil } diff --git a/util.go b/util.go index 960742d..c87b7cc 100644 --- a/util.go +++ b/util.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "os/exec" + "regexp" ) var systemctl string @@ -38,3 +39,12 @@ func execute(ctx context.Context, args []string) (string, string, int, error) { return output, warnings, code, err } + +func filterErr(stderr string) error { + matched, _ := regexp.MatchString(`does not exist`, stderr) + if matched { + return ErrDoesNotExist + } + + return nil +}