Revision c3f8cb12

b/htools/Ganeti/HTools/IAlloc.hs
30 30
  ) where
31 31

  
32 32
import Data.Either ()
33
import Data.Maybe (fromMaybe, isJust)
33
import Data.Maybe (fromMaybe)
34 34
import Data.List
35 35
import Control.Monad
36 36
import Text.JSON (JSObject, JSValue(JSArray),
......
46 46
import qualified Ganeti.Constants as C
47 47
import Ganeti.HTools.CLI
48 48
import Ganeti.HTools.Loader
49
import Ganeti.HTools.ExtLoader (loadExternalData)
50 49
import Ganeti.HTools.JSON
51 50
import Ganeti.HTools.Types
52 51

  
......
325 324
                formatNodeEvac gl nl il
326 325

  
327 326
-- | Reads the request from the data file(s).
328
readRequest :: Options -> [String] -> IO Request
329
readRequest opts args = do
330
  when (null args) $ do
331
    hPutStrLn stderr "Error: this program needs an input file."
332
    exitWith $ ExitFailure 1
333

  
334
  input_data <- readFile (head args)
335
  r1 <- case parseData input_data of
336
          Bad err -> do
337
            hPutStrLn stderr $ "Error: " ++ err
338
            exitWith $ ExitFailure 1
339
          Ok (fix_msgs, rq) -> maybeShowWarnings fix_msgs >> return rq
340
  if isJust (optDataFile opts) ||  (not . null . optNodeSim) opts
341
    then do
342
      cdata <- loadExternalData opts
343
      let Request rqt _ = r1
344
      return $ Request rqt cdata
345
    else return r1
327
readRequest :: FilePath -> IO Request
328
readRequest fp = do
329
  input_data <- readFile fp
330
  case parseData input_data of
331
    Bad err -> do
332
      hPutStrLn stderr $ "Error: " ++ err
333
      exitWith $ ExitFailure 1
334
    Ok (fix_msgs, rq) -> maybeShowWarnings fix_msgs >> return rq
346 335

  
347 336
-- | Main iallocator pipeline.
348 337
runIAllocator :: Request -> (Maybe (Node.List, Instance.List), String)
b/htools/Ganeti/HTools/Program/Hail.hs
26 26
module Ganeti.HTools.Program.Hail (main, options) where
27 27

  
28 28
import Control.Monad
29
import Data.Maybe (fromMaybe)
29
import Data.Maybe (fromMaybe, isJust)
30 30
import System.IO
31
import System.Exit
31 32

  
32 33
import qualified Ganeti.HTools.Cluster as Cluster
33 34

  
34 35
import Ganeti.HTools.CLI
35 36
import Ganeti.HTools.IAlloc
36 37
import Ganeti.HTools.Loader (Request(..), ClusterData(..))
37
import Ganeti.HTools.ExtLoader (maybeSaveData)
38
import Ganeti.HTools.ExtLoader (maybeSaveData, loadExternalData)
38 39

  
39 40
-- | Options list and functions.
40 41
options :: [OptType]
......
48 49
  , oShowHelp
49 50
  ]
50 51

  
52
wrapReadRequest :: Options -> [String] -> IO Request
53
wrapReadRequest opts args = do
54
  when (null args) $ do
55
    hPutStrLn stderr "Error: this program needs an input file."
56
    exitWith $ ExitFailure 1
57

  
58
  r1 <- readRequest (head args)
59
  if isJust (optDataFile opts) ||  (not . null . optNodeSim) opts
60
    then do
61
      cdata <- loadExternalData opts
62
      let Request rqt _ = r1
63
      return $ Request rqt cdata
64
    else return r1
65

  
66

  
51 67
-- | Main function.
52 68
main :: Options -> [String] -> IO ()
53 69
main opts args = do
......
55 71
      verbose = optVerbose opts
56 72
      savecluster = optSaveCluster opts
57 73

  
58
  request <- readRequest opts args
74
  request <- wrapReadRequest opts args
59 75

  
60 76
  let Request rq cdata = request
61 77

  

Also available in: Unified diff