diff --git a/htools/Ganeti/HTools/Loader.hs b/htools/Ganeti/HTools/Loader.hs index 446cc1044fcfd1dc18c5af477aa090c07119a5d0..5a5da6542a38a33236e3c39e1e82ad28044c148b 100644 --- a/htools/Ganeti/HTools/Loader.hs +++ b/htools/Ganeti/HTools/Loader.hs @@ -55,6 +55,7 @@ import qualified Ganeti.HTools.Container as Container import qualified Ganeti.HTools.Instance as Instance import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Group as Group +import qualified Ganeti.HTools.Cluster as Cluster import Ganeti.HTools.Types import Ganeti.HTools.Utils @@ -246,6 +247,13 @@ updateMovable selinsts exinsts inst = then Instance.setMovable inst False else inst +-- | Disables moves for instances with a split group. +disableSplitMoves :: Node.List -> Instance.Instance -> Instance.Instance +disableSplitMoves nl inst = + if not . isOk . Cluster.instanceGroup nl $ inst + then Instance.setMovable inst False + else inst + -- | Compute the longest common suffix of a list of strings that -- starts with a dot. longestDomain :: [String] -> String @@ -302,8 +310,9 @@ mergeData um extags selinsts exinsts cdata@(ClusterData gl nl il2 tags _) = nl3 = Container.map (setNodePolicy gl . computeAlias common_suffix . (`Node.buildPeers` il4)) nl2 + il5 = Container.map (disableSplitMoves nl3) il4 in if' (null lkp_unknown) - (Ok cdata { cdNodes = nl3, cdInstances = il4 }) + (Ok cdata { cdNodes = nl3, cdInstances = il5 }) (Bad $ "Unknown instance(s): " ++ show(map lrContent lkp_unknown)) -- | Checks the cluster data for consistency. diff --git a/htools/Ganeti/HTools/Program/Hbal.hs b/htools/Ganeti/HTools/Program/Hbal.hs index 7f542a5c96163c799c154f5db968d512b40f4e1d..3a361628b8581544a5357290104fcad5a995d051 100644 --- a/htools/Ganeti/HTools/Program/Hbal.hs +++ b/htools/Ganeti/HTools/Program/Hbal.hs @@ -301,11 +301,10 @@ checkCluster verbose nl il = do -- hbal doesn't currently handle split clusters let split_insts = Cluster.findSplitInstances nl il - unless (null split_insts) $ do + unless (null split_insts || verbose <= 1) $ do hPutStrLn stderr "Found instances belonging to multiple node groups:" mapM_ (\i -> hPutStrLn stderr $ " " ++ Instance.name i) split_insts - hPutStrLn stderr "Aborting." - exitWith $ ExitFailure 1 + hPutStrLn stderr "These instances will not be moved." printf "Loaded %d nodes, %d instances\n" (Container.size nl)