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