Merge 'EvacNode' and 'NodeEvacMode'
[ganeti-local] / src / Ganeti / HTools / Loader.hs
index 49109ab..7049ff6 100644 (file)
@@ -28,12 +28,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 module Ganeti.HTools.Loader
   ( mergeData
+  , clearDynU
   , checkData
   , assignIndices
   , setMaster
   , lookupNode
   , lookupInstance
   , lookupGroup
+  , eitherLive
   , commonSuffix
   , RqType(..)
   , Request(..)
@@ -58,6 +60,7 @@ import Ganeti.BasicTypes
 import qualified Ganeti.Constants as C
 import Ganeti.HTools.Types
 import Ganeti.Utils
+import Ganeti.Types (EvacMode)
 
 -- * Constants
 
@@ -287,6 +290,12 @@ mergeData um extags selinsts exinsts time cdata@(ClusterData gl nl il ctags _) =
          (Ok cdata { cdNodes = nl3, cdInstances = il5 })
          (Bad $ "Unknown instance(s): " ++ show(map lrContent lkp_unknown))
 
+-- | In a cluster description, clear dynamic utilisation information.
+clearDynU :: ClusterData -> Result ClusterData
+clearDynU cdata@(ClusterData _ _ il _ _) =
+  let il2 = Container.map (\ inst -> inst {Instance.util = zeroUtil }) il
+  in Ok cdata { cdInstances = il2 }
+
 -- | Checks the cluster data for consistency.
 checkData :: Node.List -> Instance.List
           -> ([String], Node.List)
@@ -332,3 +341,8 @@ nodeIdsk node il =
   let rfind = flip Container.find il
   in sum . map (Instance.dsk . rfind)
        $ Node.pList node ++ Node.sList node
+
+-- | Get live information or a default value
+eitherLive :: (Monad m) => Bool -> a -> m a -> m a
+eitherLive True _ live_data = live_data
+eitherLive False def_data _ = return def_data