diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dda5204..b10f0b01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Return non-zero exit code on container copy failure #1377 - Return non-zero exit code on container sub-commands #1414 - Fix excessive line spacing issue when listing nodes. #1241 +- Return non-zero exit code on node sub-commands #1421 ## v4.5.8, unreleased diff --git a/internal/app/wwctl/node/console/power.go b/internal/app/wwctl/node/console/main.go similarity index 87% rename from internal/app/wwctl/node/console/power.go rename to internal/app/wwctl/node/console/main.go index 635bcb30..fe1c99d3 100644 --- a/internal/app/wwctl/node/console/power.go +++ b/internal/app/wwctl/node/console/main.go @@ -16,14 +16,12 @@ func CobraRunE(cmd *cobra.Command, args []string) error { nodeDB, err := node.New() if err != nil { - wwlog.Error("Could not open node configuration: %s", err) - os.Exit(1) + return fmt.Errorf("could not open node configuration: %s", err) } nodes, err := nodeDB.FindAllNodes() if err != nil { - wwlog.Error("Could not get node list: %s", err) - os.Exit(1) + return fmt.Errorf("could not get node list: %s", err) } args = hostlist.Expand(args) @@ -37,8 +35,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { } if len(nodes) == 0 { - fmt.Printf("No nodes found\n") - os.Exit(1) + return fmt.Errorf("no nodes found") } for _, node := range nodes { diff --git a/internal/app/wwctl/node/edit/main.go b/internal/app/wwctl/node/edit/main.go index 328fe9cd..a4db3d5a 100644 --- a/internal/app/wwctl/node/edit/main.go +++ b/internal/app/wwctl/node/edit/main.go @@ -23,12 +23,10 @@ import ( func CobraRunE(cmd *cobra.Command, args []string) error { canWrite, err := apiutil.CanWriteConfig() if err != nil { - wwlog.Error("While checking whether can write config, err: %w", err) - os.Exit(1) + return fmt.Errorf("while checking whether can write config, err: %w", err) } if !canWrite.CanWriteConfig { - wwlog.Error("Can't write to config exiting") - os.Exit(1) + return fmt.Errorf("can not write to config exiting") } editor := os.Getenv("EDITOR") if editor == "" { @@ -46,7 +44,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { _ = yaml.Unmarshal([]byte(nodeListMsg.NodeConfMapYaml), nodeMap) file, err := os.CreateTemp(os.TempDir(), "ww4NodeEdit*.yaml") if err != nil { - wwlog.Error("Could not create temp file:%s \n", err) + return fmt.Errorf("could not create temp file: %s", err) } defer os.Remove(file.Name()) yamlTemplate := node.UnmarshalConf(node.NodeConf{}, []string{"tagsdel", "default", "profiles"}) @@ -65,8 +63,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { sum1 := hex.EncodeToString(hasher.Sum(nil)) err = util.ExecInteractive(editor, file.Name()) if err != nil { - wwlog.Error("Editor process existed with non-zero\n") - os.Exit(1) + return fmt.Errorf("editor process existed with non-zero") } _, _ = file.Seek(0, 0) hasher.Reset() @@ -125,8 +122,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { Hash: newHash.Hash, }) if err != nil { - wwlog.Error("Got following problem when writing back yaml: %s", err) - os.Exit(1) + return fmt.Errorf("got following problem when writing back yaml: %s", err) } break } diff --git a/internal/app/wwctl/node/export/main.go b/internal/app/wwctl/node/export/main.go index 7a13fdce..0e397cc7 100644 --- a/internal/app/wwctl/node/export/main.go +++ b/internal/app/wwctl/node/export/main.go @@ -1,11 +1,10 @@ package export import ( - "fmt" - "github.com/spf13/cobra" apinode "github.com/warewulf/warewulf/internal/pkg/api/node" "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" + "github.com/warewulf/warewulf/internal/pkg/wwlog" ) func CobraRunE(cmd *cobra.Command, args []string) error { @@ -21,6 +20,6 @@ func CobraRunE(cmd *cobra.Command, args []string) error { // got proper yaml back _ = yaml.Unmarshal([]byte(nodeListMsg.NodeConfMapYaml), nodeMap) */ - fmt.Println(nodeListMsg.NodeConfMapYaml) + wwlog.Info(nodeListMsg.NodeConfMapYaml) return nil } diff --git a/internal/app/wwctl/node/imprt/main.go b/internal/app/wwctl/node/imprt/main.go index 71a4fbd3..50eab1d5 100644 --- a/internal/app/wwctl/node/imprt/main.go +++ b/internal/app/wwctl/node/imprt/main.go @@ -19,16 +19,14 @@ import ( func CobraRunE(cmd *cobra.Command, args []string) error { file, err := os.Open(args[0]) if err != nil { - wwlog.Error("Could not open file:%s \n", err) - os.Exit(1) + return fmt.Errorf("could not open file: %s", err) } defer file.Close() importMap := make(map[string]*node.NodeConf) buffer, err := io.ReadAll(file) if err != nil { - wwlog.Error("Could not read:%s\n", err) - os.Exit(1) + return fmt.Errorf("could not read: %s", err) } if !ImportCVS { err = yaml.Unmarshal(buffer, importMap) @@ -37,24 +35,21 @@ func CobraRunE(cmd *cobra.Command, args []string) error { if yes { err = apinode.NodeAddFromYaml(&wwapiv1.NodeYaml{NodeConfMapYaml: string(buffer)}) if err != nil { - wwlog.Error("Got following problem when writing back yaml: %s", err) - os.Exit(1) + return fmt.Errorf("got following problem when writing back yaml: %s", err) } } } else { - wwlog.Error("Could not parse import file") + return fmt.Errorf("could not parse import file: %s", err) } } else { // reading from buffer is a bit overshot csvReader := csv.NewReader(bytes.NewReader(buffer)) records, err := csvReader.ReadAll() if err != nil { - wwlog.Error("Could not parse %s: %s\n", args[0], err) - os.Exit(1) + return fmt.Errorf("could not parse %s: %s", args[0], err) } if len(records) < 1 || len(records[0]) < 1 { - wwlog.Error("Did not find any data in %s\n", args[0]) - os.Exit(1) + return fmt.Errorf("did not find any data in %s", args[0]) } if !(records[0][0] == "node" || records[0][0] == "nodename") { Usage() @@ -63,8 +58,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { argsLen := len(records[0]) for i, line := range records[1:] { if len(line) != argsLen { - wwlog.Error("Wrong number of fields in lube %u\n", i+1) - os.Exit(1) + return fmt.Errorf("wrong number of fields in lube %d", i+1) } for j := range line { if j == 0 { @@ -84,12 +78,11 @@ func CobraRunE(cmd *cobra.Command, args []string) error { // create second buffer an marshall nodeMap to it buffer, err = yaml.Marshal(importMap) if err != nil { - wwlog.Error("Got following problem when creating yaml: %s", err) + return fmt.Errorf("got following problem when creating yaml: %s", err) } err = apinode.NodeAddFromYaml(&wwapiv1.NodeYaml{NodeConfMapYaml: string(buffer)}) if err != nil { - wwlog.Error("Got following problem when writing back yaml: %s", err) - os.Exit(1) + return fmt.Errorf("got following problem when writing back yaml: %s", err) } } } diff --git a/internal/app/wwctl/node/sensors/power.go b/internal/app/wwctl/node/sensors/main.go similarity index 91% rename from internal/app/wwctl/node/sensors/power.go rename to internal/app/wwctl/node/sensors/main.go index 5d15d91c..d4427804 100644 --- a/internal/app/wwctl/node/sensors/power.go +++ b/internal/app/wwctl/node/sensors/main.go @@ -17,14 +17,12 @@ func CobraRunE(cmd *cobra.Command, args []string) error { nodeDB, err := node.New() if err != nil { - wwlog.Error("Could not open node configuration: %s", err) - os.Exit(1) + return fmt.Errorf("could not open node configuration: %s", err) } nodes, err := nodeDB.FindAllNodes() if err != nil { - wwlog.Error("Could not get node list: %s", err) - os.Exit(1) + return fmt.Errorf("could not get node list: %s", err) } args = hostlist.Expand(args) @@ -38,7 +36,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { } if len(nodes) == 0 { - fmt.Printf("No nodes found\n") + wwlog.Info("No nodes found") os.Exit(1) } diff --git a/internal/app/wwctl/node/set/main.go b/internal/app/wwctl/node/set/main.go index 8858fa86..f3e76a80 100644 --- a/internal/app/wwctl/node/set/main.go +++ b/internal/app/wwctl/node/set/main.go @@ -2,7 +2,6 @@ package set import ( "fmt" - "os" "strings" "github.com/spf13/cobra" @@ -54,8 +53,7 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err delete(vars.nodeConf.Disks, "UNDEF") buffer, err := yaml.Marshal(vars.nodeConf) if err != nil { - wwlog.Error("Can't marshall nodeInfo", err) - os.Exit(1) + return fmt.Errorf("can not marshall nodeInfo: %s", err) } wwlog.Debug("sending following values: %s", string(buffer)) set := wwapiv1.NodeSetParameter{ diff --git a/internal/pkg/api/node/node.go b/internal/pkg/api/node/node.go index aa21ef72..3981ab1f 100644 --- a/internal/pkg/api/node/node.go +++ b/internal/pkg/api/node/node.go @@ -102,8 +102,7 @@ func NodeDelete(ndp *wwapiv1.NodeDeleteParameter) (err error) { nodeDB, err := node.New() if err != nil { - wwlog.Error("Failed to open node database: %s", err) - return + return fmt.Errorf("failed to open node database: %s", err) } dbHash := nodeDB.Hash() if hex.EncodeToString(dbHash[:]) != ndp.Hash && !ndp.Force { @@ -138,27 +137,23 @@ func NodeDelete(ndp *wwapiv1.NodeDeleteParameter) (err error) { func NodeDeleteParameterCheck(ndp *wwapiv1.NodeDeleteParameter, console bool) (nodeList []node.NodeInfo, err error) { if ndp == nil { - err = fmt.Errorf("NodeDeleteParameter is nil") - return + return nodeList, fmt.Errorf("NodeDeleteParameter is nil") } nodeDB, err := node.New() if err != nil { - wwlog.Error("Failed to open node database: %s", err) - return + return nodeList, fmt.Errorf("failed to open node database: %s", err) } dbHash := nodeDB.Hash() if hex.EncodeToString(dbHash[:]) != ndp.Hash && !ndp.Force { wwlog.Debug("got hash: %s", ndp.Hash) wwlog.Debug("actual hash: %s", hex.EncodeToString(dbHash[:])) - err = fmt.Errorf("got wrong hash, not modifying node database") - return + return nodeList, fmt.Errorf("got wrong hash, not modifying node database") } nodes, err := nodeDB.FindAllNodes() if err != nil { - wwlog.Error("Could not get node list: %s", err) - return + return nodeList, fmt.Errorf("could not get node list: %s", err) } node_args := hostlist.Expand(ndp.NodeNames) @@ -173,12 +168,12 @@ func NodeDeleteParameterCheck(ndp *wwapiv1.NodeDeleteParameter, console bool) (n } if !match { - fmt.Fprintf(os.Stderr, "ERROR: No match for node: %s\n", r) + wwlog.Error("ERROR: No match for node: %s\n", r) } } if len(nodeList) == 0 { - fmt.Printf("No nodes found\n") + wwlog.Info("No nodes found") } return }