diff --git a/Ganeti/HTools/ExtLoader.hs b/Ganeti/HTools/ExtLoader.hs index bd2e01ad57a99ac7d9c1c3d70580fdc1f40bf8d2..94c787bd08aff7ed0a9ec0c343cd1be9c2312dc0 100644 --- a/Ganeti/HTools/ExtLoader.hs +++ b/Ganeti/HTools/ExtLoader.hs @@ -83,7 +83,7 @@ parseUtilisation line = -- | External tool data loader from a variety of sources. loadExternalData :: Options - -> IO (Node.List, Instance.List, String) + -> IO (Node.List, Instance.List, [String], String) loadExternalData opts = do (env_node, env_inst) <- parseEnv () let nodef = if optNodeSet opts then optNodeFile opts @@ -131,7 +131,7 @@ loadExternalData opts = do | otherwise -> wrapIO $ Text.loadData nodef instf let ldresult = input_data >>= Loader.mergeData util_data' exTags - (loaded_nl, il, csf) <- + (loaded_nl, il, tags, csf) <- (case ldresult of Ok x -> return x Bad s -> do @@ -144,4 +144,4 @@ loadExternalData opts = do hPutStrLn stderr "Warning: cluster has inconsistent data:" hPutStrLn stderr . unlines . map (printf " - %s") $ fix_msgs - return (fixed_nl, il, csf) + return (fixed_nl, il, tags, csf) diff --git a/Ganeti/HTools/IAlloc.hs b/Ganeti/HTools/IAlloc.hs index 3215cb33cdce17f4019808c876bc011dfd05c4bd..be9d5063d2138f5df506b4e32212a60129543442 100644 --- a/Ganeti/HTools/IAlloc.hs +++ b/Ganeti/HTools/IAlloc.hs @@ -110,7 +110,7 @@ parseData body = do iobj <- mapM (\(x,y) -> asJSObject y >>= parseInstance ktn x . fromJSObject) idata let (kti, il) = assignIndices iobj - (map_n, map_i, csf) <- mergeData [] [] (nl, il) + (map_n, map_i, _, csf) <- mergeData [] [] (nl, il, []) req_nodes <- fromObj "required_nodes" request optype <- fromObj "type" request rqtype <- diff --git a/Ganeti/HTools/Loader.hs b/Ganeti/HTools/Loader.hs index 35be6ffb3309138e2988060929b18726d4a5a8d3..c1ad0a70fb5367e63cb74999e85a3be819e02cf4 100644 --- a/Ganeti/HTools/Loader.hs +++ b/Ganeti/HTools/Loader.hs @@ -140,11 +140,10 @@ stripSuffix sflen name = take (length name - sflen) name -- list and massages it into the correct format. mergeData :: [(String, DynUtil)] -- ^ Instance utilisation data -> [String] -- ^ Exclusion tags - -> (Node.AssocList, - Instance.AssocList) -- ^ Data from either Text.loadData - -- or Rapi.loadData - -> Result (Node.List, Instance.List, String) -mergeData um extags (nl, il) = + -> (Node.AssocList, Instance.AssocList, [String]) + -- ^ Data from backends + -> Result (Node.List, Instance.List, [String], String) +mergeData um extags (nl, il, tags) = let il2 = Container.fromAssocList il il3 = foldl' (\im (name, n_util) -> case Container.findByName im name of @@ -163,7 +162,7 @@ mergeData um extags (nl, il) = csl = length common_suffix snl = Container.map (\n -> setName n (stripSuffix csl $ nameOf n)) nl3 sil = Container.map (\i -> setName i (stripSuffix csl $ nameOf i)) il4 - in Ok (snl, sil, common_suffix) + in Ok (snl, sil, tags, common_suffix) -- | Checks the cluster data for consistency. checkData :: Node.List -> Instance.List diff --git a/Ganeti/HTools/Luxi.hs b/Ganeti/HTools/Luxi.hs index c2e8bdb53f1f02bda56e1427e5da6019c722b4bc..f60cce09a047dc714fb03381ff4e2efe3bf8d1e6 100644 --- a/Ganeti/HTools/Luxi.hs +++ b/Ganeti/HTools/Luxi.hs @@ -144,7 +144,7 @@ parseNode v = fail ("Invalid node query result: " ++ show v) -- | Builds the cluster data from an URL. loadData :: String -- ^ Unix socket to use as source - -> IO (Result (Node.AssocList, Instance.AssocList)) + -> IO (Result (Node.AssocList, Instance.AssocList, [String])) loadData master = E.bracket (L.getClient master) @@ -157,5 +157,5 @@ loadData master = let (node_names, node_idx) = assignIndices node_data inst_data <- instances >>= getInstances node_names let (_, inst_idx) = assignIndices inst_data - return (node_idx, inst_idx) + return (node_idx, inst_idx, []) ) diff --git a/Ganeti/HTools/Rapi.hs b/Ganeti/HTools/Rapi.hs index d8595725e8338a9db2179e88f2bf9e09905893ee..261b29095971d4eec0800b7f68adc1b3ed4045e3 100644 --- a/Ganeti/HTools/Rapi.hs +++ b/Ganeti/HTools/Rapi.hs @@ -114,7 +114,7 @@ parseNode a = do -- | Builds the cluster data from an URL. loadData :: String -- ^ Cluster or URL to use as source - -> IO (Result (Node.AssocList, Instance.AssocList)) + -> IO (Result (Node.AssocList, Instance.AssocList, [String])) loadData master = do -- IO monad let url = formatHost master node_body <- getUrl $ printf "%s/2/nodes?bulk=1" url @@ -124,4 +124,4 @@ loadData master = do -- IO monad let (node_names, node_idx) = assignIndices node_data inst_data <- inst_body >>= getInstances node_names let (_, inst_idx) = assignIndices inst_data - return (node_idx, inst_idx) + return (node_idx, inst_idx, []) diff --git a/Ganeti/HTools/Simu.hs b/Ganeti/HTools/Simu.hs index ee0e66a9d9376802cb2dccec2e0a481d6668e0c4..d8221687135fdc7056c0cbbd19a7ad49ebbf30db 100644 --- a/Ganeti/HTools/Simu.hs +++ b/Ganeti/HTools/Simu.hs @@ -52,7 +52,7 @@ parseDesc desc = -- | Builds the cluster data from node\/instance files. loadData :: String -- ^ Cluster description in text format - -> IO (Result (Node.AssocList, Instance.AssocList)) + -> IO (Result (Node.AssocList, Instance.AssocList, [String])) loadData ndata = -- IO monad, just for consistency with the other loaders return $ do (cnt, disk, mem, cpu) <- parseDesc ndata @@ -63,4 +63,4 @@ loadData ndata = -- IO monad, just for consistency with the other loaders (fromIntegral cpu) False in (idx, Node.setIdx n idx) ) [1..cnt] - return (nodes, []) + return (nodes, [], []) diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs index cd82aa8123da5ccca029ff7877aabb985a13b3ab..efe8b48f1a5c7d97c9f95d705961f32eebc5415d 100644 --- a/Ganeti/HTools/Text.hs +++ b/Ganeti/HTools/Text.hs @@ -91,7 +91,7 @@ loadTabular text_data convert_fn = do -- | Builds the cluster data from node\/instance files. loadData :: String -- ^ Node data in string format -> String -- ^ Instance data in string format - -> IO (Result (Node.AssocList, Instance.AssocList)) + -> IO (Result (Node.AssocList, Instance.AssocList, [String])) loadData nfile ifile = do -- IO monad ndata <- readFile nfile idata <- readFile ifile @@ -100,4 +100,4 @@ loadData nfile ifile = do -- IO monad (ktn, nl) <- loadTabular ndata loadNode {- instance file: name mem disk status pnode snode -} (_, il) <- loadTabular idata (loadInst ktn) - return (nl, il) + return (nl, il, []) diff --git a/hbal.hs b/hbal.hs index c2a58882b32a05b86ea4308356ba104522fe5882..51ca704c40f3d6050265a0a6397895b08864eb83 100644 --- a/hbal.hs +++ b/hbal.hs @@ -187,7 +187,7 @@ main = do verbose = optVerbose opts shownodes = optShowNodes opts - (fixed_nl, il, csf) <- loadExternalData opts + (fixed_nl, il, _, csf) <- loadExternalData opts let offline_names = optOffline opts all_nodes = Container.elems fixed_nl diff --git a/hscan.hs b/hscan.hs index 1d5ef9cb2a3fbf0980a8e5f30b9a3753fb81f741..0469eaeed706b7653fb87f7d0b83e7ca98ec4756 100644 --- a/hscan.hs +++ b/hscan.hs @@ -142,7 +142,7 @@ main = do Bad err -> printf "\nError: failed to load data. \ \Details:\n%s\n" err Ok x -> do - let (nl, il, csf) = x + let (nl, il, _, csf) = x (_, fix_nl) = Loader.checkData nl il putStrLn $ printCluster fix_nl il when (isJust shownodes) $ diff --git a/hspace.hs b/hspace.hs index 3ee89ee13a12d21ca39fdf1dc2425f7499750fd0..018317de9a5351ccf22dc7d2e19b39f808f98f2c 100644 --- a/hspace.hs +++ b/hspace.hs @@ -216,7 +216,7 @@ main = do ispec = optISpec opts shownodes = optShowNodes opts - (fixed_nl, il, csf) <- loadExternalData opts + (fixed_nl, il, _, csf) <- loadExternalData opts printKeys $ map (\(a, fn) -> ("SPEC_" ++ a, fn ispec)) specData printKeys [ ("SPEC_RQN", printf "%d" (optINodes opts)) ]