Revision 2fd5a116 src/htools.hs

b/src/htools.hs
25 25

  
26 26
module Main (main) where
27 27

  
28
import Control.Exception
29
import Control.Monad (guard)
30
import Data.Char (toLower)
31
import System.Environment
32
import System.IO
33
import System.IO.Error (isDoesNotExistError)
34

  
35
import Ganeti.Common (formatCommands)
36
import Ganeti.HTools.CLI (parseOpts, genericOpts)
37
import Ganeti.HTools.Program (personalities)
38
import Ganeti.Utils
39

  
40
-- | Display usage and exit.
41
usage :: String -> IO ()
42
usage name = do
43
  hPutStrLn stderr $ "Unrecognised personality '" ++ name ++ "'."
44
  hPutStrLn stderr "This program must be installed under one of the following\
45
                   \ names:"
46
  hPutStrLn stderr . unlines $ formatCommands personalities
47
  exitErr "Please either rename/symlink the program or set\n\
48
          \the environment variable HTOOLS to the desired role."
49

  
50
main :: IO ()
51
main = do
52
  binary <- catchJust (guard . isDoesNotExistError)
53
            (getEnv "HTOOLS") (const getProgName)
54
  let name = map toLower binary
55
  case name `lookup` personalities of
56
    Nothing -> usage name
57
    Just (fn, options, arguments, _) -> do
58
         cmd_args <- getArgs
59
         real_options <- options
60
         (opts, args) <- parseOpts cmd_args name (real_options ++ genericOpts)
61
                           arguments
62
         fn opts args
28
import Ganeti.HTools.Program.Main (main)

Also available in: Unified diff