From 2727257a27e09454035b07ca376d89aec7a39e14 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Sat, 23 May 2009 00:34:51 +0100 Subject: [PATCH] Add back names to nodes/instances In order to simplify the data structures, we add back the name on the node and instance objects. We still keep the index for, well, indexing, but we will use the name directly from the object, in order to get rid of the ktn/kti arguments which are passed around everywhere. --- Ganeti/HTools/IAlloc.hs | 4 ++-- Ganeti/HTools/Instance.hs | 8 +++++--- Ganeti/HTools/Node.hs | 12 +++++++----- Ganeti/HTools/Rapi.hs | 6 +++--- Ganeti/HTools/Text.hs | 6 +++--- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Ganeti/HTools/IAlloc.hs b/Ganeti/HTools/IAlloc.hs index 76776e7c5..f6a273370 100644 --- a/Ganeti/HTools/IAlloc.hs +++ b/Ganeti/HTools/IAlloc.hs @@ -43,7 +43,7 @@ parseBaseInstance n a = do x@(Ok _) -> x mem <- fromObj "memory" a let running = "running" - return $ (n, Instance.create mem disk running 0 0) + return $ (n, Instance.create n mem disk running 0 0) parseInstance :: NameAssoc -> String @@ -68,7 +68,7 @@ parseNode n a = do dfree <- fromObj "free_disk" a offline <- fromObj "offline" a drained <- fromObj "offline" a - return $ (name, Node.create mtotal mnode mfree dtotal dfree + return $ (name, Node.create n mtotal mnode mfree dtotal dfree (offline || drained)) parseData :: String -> Result Request diff --git a/Ganeti/HTools/Instance.hs b/Ganeti/HTools/Instance.hs index 96a7afe52..f7b9b42d4 100644 --- a/Ganeti/HTools/Instance.hs +++ b/Ganeti/HTools/Instance.hs @@ -6,7 +6,8 @@ intelligence is in the "Node" and "Cluster" modules. -} module Ganeti.HTools.Instance where -data Instance = Instance { mem :: Int -- ^ memory of the instance +data Instance = Instance { name :: String -- ^ the instance name + , mem :: Int -- ^ memory of the instance , dsk :: Int -- ^ disk size of instance , running :: Bool -- ^ whether the instance -- is running @@ -20,9 +21,10 @@ data Instance = Instance { mem :: Int -- ^ memory of the instance -- | A simple name for the int, instance association list type AssocList = [(Int, Instance)] -create :: Int -> Int -> String -> Int -> Int -> Instance -create mem_init dsk_init run_init pn sn = +create :: String -> Int -> Int -> String -> Int -> Int -> Instance +create name_init mem_init dsk_init run_init pn sn = Instance { + name = name_init, mem = mem_init, dsk = dsk_init, running = case run_init of diff --git a/Ganeti/HTools/Node.hs b/Ganeti/HTools/Node.hs index c5856fbe7..228107e5b 100644 --- a/Ganeti/HTools/Node.hs +++ b/Ganeti/HTools/Node.hs @@ -6,7 +6,7 @@ module Ganeti.HTools.Node ( - Node(failN1, idx, t_mem, n_mem, f_mem, t_dsk, f_dsk, + Node(failN1, name, idx, t_mem, n_mem, f_mem, t_dsk, f_dsk, p_mem, p_dsk, p_rem, plist, slist, offline) -- * Constructor @@ -38,7 +38,8 @@ import qualified Ganeti.HTools.Container as Container import qualified Ganeti.HTools.Instance as Instance import qualified Ganeti.HTools.PeerMap as PeerMap -data Node = Node { t_mem :: Double -- ^ total memory (MiB) +data Node = Node { name :: String -- ^ the node name + , t_mem :: Double -- ^ total memory (MiB) , n_mem :: Int -- ^ node memory (MiB) , f_mem :: Int -- ^ free memory (MiB) , x_mem :: Int -- ^ unaccounted memory (MiB) @@ -72,11 +73,12 @@ The index and the peers maps are empty, and will be need to be update later via the 'setIdx' and 'buildPeers' functions. -} -create :: Double -> Int -> Int -> Double -> Int -> Bool -> Node -create mem_t_init mem_n_init mem_f_init dsk_t_init dsk_f_init - offline_init = +create :: String -> Double -> Int -> Int -> Double -> Int -> Bool -> Node +create name_init mem_t_init mem_n_init mem_f_init + dsk_t_init dsk_f_init offline_init = Node { + name = name_init, t_mem = mem_t_init, n_mem = mem_n_init, f_mem = mem_f_init, diff --git a/Ganeti/HTools/Rapi.hs b/Ganeti/HTools/Rapi.hs index 58540e1da..6f20e7bf4 100644 --- a/Ganeti/HTools/Rapi.hs +++ b/Ganeti/HTools/Rapi.hs @@ -63,7 +63,7 @@ parseInstance ktn a = do snode <- (if null snodes then return Node.noSecondary else readEitherString (head snodes) >>= lookupNode ktn name) running <- fromObj "status" a - let inst = Instance.create mem disk running pnode snode + let inst = Instance.create name mem disk running pnode snode return (name, inst) parseNode :: JSObject JSValue -> Result (String, Node.Node) @@ -71,7 +71,7 @@ parseNode a = do name <- fromObj "name" a offline <- fromObj "offline" a node <- (case offline of - True -> return $ Node.create 0 0 0 0 0 True + True -> return $ Node.create name 0 0 0 0 0 True _ -> do drained <- fromObj "drained" a mtotal <- fromObj "mtotal" a @@ -79,7 +79,7 @@ parseNode a = do mfree <- fromObj "mfree" a dtotal <- fromObj "dtotal" a dfree <- fromObj "dfree" a - return $ Node.create mtotal mnode mfree + return $ Node.create name mtotal mnode mfree dtotal dfree (offline || drained)) return (name, node) diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs index a148c2b02..03ff5cf6b 100644 --- a/Ganeti/HTools/Text.hs +++ b/Ganeti/HTools/Text.hs @@ -31,14 +31,14 @@ loadNode :: (Monad m) => [String] -> m (String, Node.Node) loadNode (name:tm:nm:fm:td:fd:fo:[]) = do new_node <- if any (== "?") [tm,nm,fm,td,fd] || fo == "Y" then - return $ Node.create 0 0 0 0 0 True + return $ Node.create name 0 0 0 0 0 True else do vtm <- tryRead name tm vnm <- tryRead name nm vfm <- tryRead name fm vtd <- tryRead name td vfd <- tryRead name fd - return $ Node.create vtm vnm vfm vtd vfd False + return $ Node.create name vtm vnm vfm vtd vfd False return (name, new_node) loadNode s = fail $ "Invalid/incomplete node data: '" ++ (show s) ++ "'" @@ -53,7 +53,7 @@ loadInst ktn (name:mem:dsk:status:pnode:snode:[]) = do vdsk <- tryRead name dsk when (sidx == pidx) $ fail $ "Instance " ++ name ++ " has same primary and secondary node - " ++ pnode - let newinst = Instance.create vmem vdsk status pidx sidx + let newinst = Instance.create name vmem vdsk status pidx sidx return (name, newinst) loadInst _ s = fail $ "Invalid/incomplete instance data: '" ++ (show s) ++ "'" -- GitLab