diff --git a/src/ectl/sv_subcommand.go b/src/ectl/sv_subcommand.go index 8af355c..75bcbed 100644 --- a/src/ectl/sv_subcommand.go +++ b/src/ectl/sv_subcommand.go @@ -190,6 +190,18 @@ func enableDisableService(subcommand string) { verb = "disabled" } + // Ensure service exists + if stage != 0 { + if !serviceExists(service) { + if printJson { + fmt.Printf("{\"error\":\"Service (%s) does not exist\"}\n", verb) + } else { + fmt.Printf("Service (%s) does not exist\n", verb) + } + os.Exit(1) + } + } + // Return if service is already enabled if _, enabledStage := isServiceEnabled(service); enabledStage == stage { if printJson { diff --git a/src/ectl/utils.go b/src/ectl/utils.go index e54b936..02b3b00 100644 --- a/src/ectl/utils.go +++ b/src/ectl/utils.go @@ -9,6 +9,30 @@ import ( "gopkg.in/yaml.v3" ) +func serviceExists(service string) bool { + dirEntries, err := os.ReadDir(path.Join(sysconfdir, "esvm/services")) + if err != nil { + return false + } + + for _, entry := range dirEntries { + var dataMap map[string]any + + data, err := os.ReadFile(path.Join(sysconfdir, "esvm/services", entry.Name())) + + err = yaml.Unmarshal(data, &dataMap) + if err != nil { + return false + } + + if name, ok := dataMap["name"]; ok && name == service { + return true + } + } + + return false +} + func isServiceEnabled(service string) (bool, int) { for stage, services := range readEnabledServices() { if slices.Contains(services, service) {