fix for the openrc status func (#283)

* fix for the openrc status func

Signed-off-by: Karen Almog <kalmog@mirantis.com>

* openrc: exitCode parsing for better status

Signed-off-by: Karen Almog <kalmog@mirantis.com>
This commit is contained in:
Karen Almog
2021-07-28 02:15:19 +02:00
committed by GitHub
parent 36c9bf8c36
commit a323c3813b
+23 -11
View File
@@ -8,7 +8,6 @@ import (
"os/exec"
"os/signal"
"regexp"
"strings"
"syscall"
"text/template"
"time"
@@ -166,19 +165,32 @@ func (s *openrc) Run() (err error) {
}
func (s *openrc) Status() (Status, error) {
// rc-service uses the errno library for its exit codes:
// errno 0 = service started
// errno 1 = EPERM 1 Operation not permitted
// errno 2 = ENOENT 2 No such file or directory
// errno 3 = ESRCH 3 No such process
// for more info, see https://man7.org/linux/man-pages/man3/errno.3.html
_, out, err := runWithOutput("rc-service", s.Name, "status")
if err != nil {
return StatusUnknown, err
}
switch {
case strings.HasPrefix(out, "Running"):
return StatusRunning, nil
case strings.HasPrefix(out, "Stopped"):
return StatusStopped, nil
default:
return StatusUnknown, ErrNotInstalled
if exiterr, ok := err.(*exec.ExitError); ok {
// The program has exited with an exit code != 0
exitCode := exiterr.ExitCode()
switch {
case exitCode == 1:
return StatusUnknown, err
case exitCode == 2:
return StatusUnknown, ErrNotInstalled
case exitCode == 3:
return StatusStopped, nil
default:
return StatusUnknown, fmt.Errorf("unknown error: %v - %v", out, err)
}
} else {
return StatusUnknown, err
}
}
return StatusRunning, nil
}
func (s *openrc) Start() error {