Currently, instance desired location tags are not set for the
instance(s) in iallocator request. This patch fixes the issue.

Signed-off-by: Oleg Ponomarev <[email protected]>
---
 src/Ganeti/HTools/Backend/IAlloc.hs | 9 ++++++---
 src/Ganeti/HTools/Loader.hs         | 2 ++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/Ganeti/HTools/Backend/IAlloc.hs 
b/src/Ganeti/HTools/Backend/IAlloc.hs
index 7bd31ee..3bb8677 100644
--- a/src/Ganeti/HTools/Backend/IAlloc.hs
+++ b/src/Ganeti/HTools/Backend/IAlloc.hs
@@ -229,6 +229,10 @@ parseData now body = do
   let (kti, il) = assignIndices iobj
   -- cluster tags
   ctags <- extrObj "cluster_tags"
+  let ex_tags = extractExTags ctags
+      dsrd_loc_tags = extractDesiredLocations ctags
+      updateTags = updateExclTags ex_tags .
+                   updateDesiredLocationTags dsrd_loc_tags
   cdata1 <- mergeData [] [] [] [] now (ClusterData gl nl il ctags defIPolicy)
   let (msgs, fix_nl) = checkData (cdNodes cdata1) (cdInstances cdata1)
       cdata = cdata1 { cdNodes = fix_nl }
@@ -245,7 +249,7 @@ parseData now body = do
               rest_nodes <- maybeFromObj request "restrict-to-nodes"
               req_nodes <- extrReq "required_nodes"
               inew      <- parseBaseInstance rname request
-              let io = updateExclTags (extractExTags ctags) $ snd inew
+              let io = updateTags $ snd inew
               return $ Allocate io (Cluster.AllocDetails req_nodes rgn)
                                 rest_nodes
         | optype == C.iallocatorModeReloc ->
@@ -282,8 +286,7 @@ parseData now body = do
                                  rgn       <- maybeFromObj request "group_name"
                                  req_nodes <- extrFromReq r "required_nodes"
                                  inew      <- parseBaseInstance rname r
-                                 let io = updateExclTags (extractExTags ctags)
-                                            $ snd inew
+                                 let io = updateTags $ snd inew
                                  return (io, Cluster.AllocDetails
                                                req_nodes rgn))
               return $ MultiAllocate prqs
diff --git a/src/Ganeti/HTools/Loader.hs b/src/Ganeti/HTools/Loader.hs
index 21848c3..50ffbc1 100644
--- a/src/Ganeti/HTools/Loader.hs
+++ b/src/Ganeti/HTools/Loader.hs
@@ -53,6 +53,8 @@ module Ganeti.HTools.Loader
   , ClusterData(..)
   , isAllocationRequest
   , emptyCluster
+  , extractDesiredLocations
+  , updateDesiredLocationTags
   ) where
 
 import Control.Monad
-- 
2.6.0.rc2.230.g3dd15c0

Reply via email to