From 2795466bba6e4dbf092587b79cb7cc90b1fa776b Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Tue, 7 Jul 2009 10:32:52 +0200
Subject: [PATCH] Show errors on stderr instead of stdout

Currently many of the exit and warning conditions mistakenly display error
messages on stdout, which makes parsing the output of programs harder. This
patch attempts to fix such occurrences.
---
 Ganeti/HTools/CLI.hs |  8 ++++----
 hail.hs              |  2 +-
 hbal.hs              |  6 +++---
 hspace.hs            | 15 ++++++++-------
 4 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/Ganeti/HTools/CLI.hs b/Ganeti/HTools/CLI.hs
index 972d4a2fa..d625e2fa0 100644
--- a/Ganeti/HTools/CLI.hs
+++ b/Ganeti/HTools/CLI.hs
@@ -42,7 +42,7 @@ import System.IO
 import System.Info
 import System
 import Monad
-import Text.Printf (printf)
+import Text.Printf (printf, hPrintf)
 import qualified Data.Version
 
 import qualified Ganeti.HTools.Version as Version(version)
@@ -151,13 +151,13 @@ loadExternalData opts = do
       (case ldresult of
          Ok x -> return x
          Bad s -> do
-           printf "Error: failed to load data. Details:\n%s\n" s
+           hPrintf stderr "Error: failed to load data. Details:\n%s\n" s
            exitWith $ ExitFailure 1
       )
   let (fix_msgs, fixed_nl) = Loader.checkData loaded_nl il
 
   unless (null fix_msgs || silent opts) $ do
-         putStrLn "Warning: cluster has inconsistent data:"
-         putStrLn . unlines . map (printf "  - %s") $ fix_msgs
+         hPutStrLn stderr "Warning: cluster has inconsistent data:"
+         hPutStrLn stderr . unlines . map (printf "  - %s") $ fix_msgs
 
   return (fixed_nl, il, csf)
diff --git a/hail.hs b/hail.hs
index 4befe386d..d216a46e3 100644
--- a/hail.hs
+++ b/hail.hs
@@ -124,7 +124,7 @@ main = do
 
   request <- case (parseData input_data) of
                Bad err -> do
-                 putStrLn $ "Error: " ++ err
+                 hPutStrLn stderr $ "Error: " ++ err
                  exitWith $ ExitFailure 1
                Ok rq -> return rq
 
diff --git a/hbal.hs b/hbal.hs
index 7e5ab282d..15333462e 100644
--- a/hbal.hs
+++ b/hbal.hs
@@ -34,7 +34,7 @@ import System.IO
 import System.Console.GetOpt
 import qualified System
 
-import Text.Printf (printf)
+import Text.Printf (printf, hPrintf)
 
 import qualified Ganeti.HTools.Container as Container
 import qualified Ganeti.HTools.Cluster as Cluster
@@ -224,8 +224,8 @@ main = do
       m_dsk = optMdsk opts
 
   when (length offline_wrong > 0) $ do
-         printf "Wrong node name(s) set as offline: %s\n"
-                (commaJoin offline_wrong)
+         hPrintf stderr "Wrong node name(s) set as offline: %s\n"
+                     (commaJoin offline_wrong)
          exitWith $ ExitFailure 1
 
   let nm = Container.map (\n -> if elem (Node.idx n) offline_indices
diff --git a/hspace.hs b/hspace.hs
index 6ad59ccbc..ae83c3515 100644
--- a/hspace.hs
+++ b/hspace.hs
@@ -33,7 +33,7 @@ import System.IO
 import System.Console.GetOpt
 import qualified System
 
-import Text.Printf (printf)
+import Text.Printf (printf, hPrintf)
 
 import qualified Ganeti.HTools.Container as Container
 import qualified Ganeti.HTools.Cluster as Cluster
@@ -241,14 +241,15 @@ main = do
          hPutStrLn stderr "Error: this program doesn't take any arguments."
          exitWith $ ExitFailure 1
 
+  let verbose = optVerbose opts
+
+  (fixed_nl, il, csf) <- CLI.loadExternalData opts
+
   printf "Spec RAM: %d\n" (optIMem opts)
   printf "Spec disk: %d\n" (optIDsk opts)
   printf "Spec CPUs: %d\n" (optIVCPUs opts)
   printf "Spec nodes: %d\n" (optINodes opts)
 
-  let verbose = optVerbose opts
-
-  (fixed_nl, il, csf) <- CLI.loadExternalData opts
   let num_instances = length $ Container.elems il
 
   let offline_names = optOffline opts
@@ -263,12 +264,12 @@ main = do
       m_dsk = optMdsk opts
 
   when (length offline_wrong > 0) $ do
-         printf "Error: Wrong node name(s) set as offline: %s\n"
-                (commaJoin offline_wrong)
+         hPrintf stderr "Error: Wrong node name(s) set as offline: %s\n"
+                     (commaJoin offline_wrong)
          exitWith $ ExitFailure 1
 
   when (req_nodes /= 1 && req_nodes /= 2) $ do
-         printf "Error: Invalid required nodes (%d)\n" req_nodes
+         hPrintf stderr "Error: Invalid required nodes (%d)\n" req_nodes
          exitWith $ ExitFailure 1
 
   let nm = Container.map (\n -> if elem (Node.idx n) offline_indices
-- 
GitLab