Update NEWS file for the 0.1.1 release
[ganeti-local] / hn1.hs
diff --git a/hn1.hs b/hn1.hs
index e307bad..4b3064e 100644 (file)
--- a/hn1.hs
+++ b/hn1.hs
@@ -18,8 +18,7 @@ import qualified Ganeti.HTools.Container as Container
 import qualified Ganeti.HTools.Instance as Instance
 import qualified Ganeti.HTools.Cluster as Cluster
 import qualified Ganeti.HTools.CLI as CLI
 import qualified Ganeti.HTools.Instance as Instance
 import qualified Ganeti.HTools.Cluster as Cluster
 import qualified Ganeti.HTools.CLI as CLI
-import Ganeti.HTools.Rapi
-import Ganeti.HTools.Utils
+import Ganeti.HTools.Types
 
 -- | Command line options structure.
 data Options = Options
 
 -- | Command line options structure.
 data Options = Options
@@ -38,6 +37,18 @@ data Options = Options
     , optShowHelp    :: Bool     -- ^ Just show the help
     } deriving Show
 
     , optShowHelp    :: Bool     -- ^ Just show the help
     } deriving Show
 
+instance CLI.CLIOptions Options where
+    showVersion = optShowVer
+    showHelp    = optShowHelp
+
+instance CLI.EToolOptions Options where
+    nodeFile   = optNodef
+    nodeSet    = optNodeSet
+    instFile   = optInstf
+    instSet    = optInstSet
+    masterName = optMaster
+    silent _   = False
+
 -- | Default values for the command line options.
 defaultOptions :: Options
 defaultOptions    = Options
 -- | Default values for the command line options.
 defaultOptions :: Options
 defaultOptions    = Options
@@ -60,7 +71,7 @@ defaultOptions    = Options
 we find a valid solution or we exceed the maximum depth.
 
 -}
 we find a valid solution or we exceed the maximum depth.
 
 -}
-iterateDepth :: Cluster.NodeList
+iterateDepth :: NodeList
              -> [Instance.Instance]
              -> Int
              -> Int
              -> [Instance.Instance]
              -> Int
              -> Int
@@ -128,36 +139,13 @@ main :: IO ()
 main = do
   cmd_args <- System.getArgs
   (opts, args) <- CLI.parseOpts cmd_args "hn1" options
 main = do
   cmd_args <- System.getArgs
   (opts, args) <- CLI.parseOpts cmd_args "hn1" options
-                  defaultOptions optShowHelp
+                  defaultOptions
 
   unless (null args) $ do
          hPutStrLn stderr "Error: this program doesn't take any arguments."
          exitWith $ ExitFailure 1
 
 
   unless (null args) $ do
          hPutStrLn stderr "Error: this program doesn't take any arguments."
          exitWith $ ExitFailure 1
 
-  when (optShowVer opts) $ do
-         printf $ CLI.showVersion "hn1"
-         exitWith ExitSuccess
-
-  (env_node, env_inst) <- CLI.parseEnv ()
-  let nodef = if optNodeSet opts then optNodef opts
-              else env_node
-      instf = if optInstSet opts then optInstf opts
-              else env_inst
-      min_depth = optMinDepth opts
-      (node_data, inst_data) =
-          case optMaster opts of
-            "" -> (readFile nodef,
-                   readFile instf)
-            host -> (readData getNodes host,
-                     readData getInstances host)
-
-  (loaded_nl, il, csf, ktn, kti) <- liftM2 Cluster.loadData node_data inst_data
-
-  let (fix_msgs, nl) = Cluster.checkData loaded_nl il ktn kti
-
-  unless (null fix_msgs) $ do
-         putStrLn "Warning: cluster has inconsistent data:"
-         putStrLn . unlines . map (\s -> printf "  - %s" s) $ fix_msgs
+  (nl, il, csf) <- CLI.loadExternalData opts
 
   printf "Loaded %d nodes, %d instances\n"
              (Container.size nl)
 
   printf "Loaded %d nodes, %d instances\n"
              (Container.size nl)
@@ -167,6 +155,8 @@ main = do
          printf "Note: Stripping common suffix of '%s' from names\n" csf
 
   let (bad_nodes, bad_instances) = Cluster.computeBadItems nl il
          printf "Note: Stripping common suffix of '%s' from names\n" csf
 
   let (bad_nodes, bad_instances) = Cluster.computeBadItems nl il
+      min_depth = optMinDepth opts
+
   printf "Initial check done: %d bad nodes, %d bad instances.\n"
              (length bad_nodes) (length bad_instances)
 
   printf "Initial check done: %d bad nodes, %d bad instances.\n"
              (length bad_nodes) (length bad_instances)
 
@@ -207,7 +197,7 @@ main = do
          (Cluster.printStats ns)
 
   printf "Solution (delta=%d):\n" $! min_d
          (Cluster.printStats ns)
 
   printf "Solution (delta=%d):\n" $! min_d
-  let (sol_strs, cmd_strs) = Cluster.printSolution il ktn kti solution
+  let (sol_strs, cmd_strs) = Cluster.printSolution ns il solution
   putStr $ unlines $ sol_strs
   when (optShowCmds opts) $
        do
   putStr $ unlines $ sol_strs
   when (optShowCmds opts) $
        do
@@ -221,6 +211,6 @@ main = do
              (final_mem, final_disk) = Cluster.totalResources ns
          putStrLn ""
          putStrLn "Final cluster status:"
              (final_mem, final_disk) = Cluster.totalResources ns
          putStrLn ""
          putStrLn "Final cluster status:"
-         putStrLn $ Cluster.printNodes ktn ns
+         putStrLn $ Cluster.printNodes ns
          printf "Original: mem=%d disk=%d\n" orig_mem orig_disk
          printf "Final:    mem=%d disk=%d\n" final_mem final_disk
          printf "Original: mem=%d disk=%d\n" orig_mem orig_disk
          printf "Final:    mem=%d disk=%d\n" final_mem final_disk