Merge branch 'stable-2.16' into stable-2.17
authorKlaus Aehlig <aehlig@google.com>
Mon, 15 Feb 2016 10:23:12 +0000 (11:23 +0100)
committerKlaus Aehlig <aehlig@google.com>
Tue, 16 Feb 2016 12:09:58 +0000 (13:09 +0100)
* stable-2.16
  On group verify, only flush to group nodes
  Support flushing to a single group
  Make config distribution parametric in target group

Conflicts:
src/Ganeti/WConfd/Core.hs: take all additions

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Viktor Bachraty <vbachraty@google.com>

1  2 
lib/cmdlib/cluster/verify.py
lib/config/__init__.py
src/Ganeti/WConfd/ConfigWriter.hs
src/Ganeti/WConfd/Core.hs
src/Ganeti/WConfd/Monad.hs

Simple merge
Simple merge
@@@ -43,16 -43,13 +43,17 @@@ module Ganeti.WConfd.ConfigWrite
    , distSSConfAsyncTask
    ) where
  
 -import Control.Applicative
 +import Prelude ()
 +import Ganeti.Prelude
 +
 +import Control.Monad ((>=>), liftM, unless)
  import Control.Monad.Base
 -import Control.Monad.Error
 +import Control.Monad.Error.Class (MonadError)
  import qualified Control.Monad.State.Strict as S
 +import Control.Monad.Trans.Class (lift)
  import Control.Monad.Trans.Control
  import Data.Monoid
+ import qualified Data.Set as Set
  
  import Ganeti.BasicTypes
  import Ganeti.Errors
@@@ -163,32 -158,13 +163,37 @@@ writeConfigAndUnlock cid cdata = d
  -- | Force the distribution of configuration without actually modifying it.
  -- It is not necessary to hold a lock for this operation.
  flushConfig :: WConfdMonad ()
- flushConfig = forceConfigStateDistribution
+ flushConfig = forceConfigStateDistribution Everywhere
+ -- | Force the distribution of configuration to a given group without actually
+ -- modifying it. It is not necessary to hold a lock for this operation.
+ flushConfigGroup :: String -> WConfdMonad ()
+ flushConfigGroup = forceConfigStateDistribution . ToGroups . S.singleton
  
 +-- *** Access to individual parts of the configuration
 +
 +-- | Get the configurable value of the maintenance interval
 +maintenanceRoundDelay :: WConfdMonad Int
 +maintenanceRoundDelay = liftM ( maintRoundDelay . configMaintenance )
 +                              CW.readConfig
 +
 +-- | Get the list of jobs in the state of the maintenance daemon.
 +maintenanceJobs :: WConfdMonad [JobId]
 +maintenanceJobs = liftM ( maintJobs . configMaintenance ) CW.readConfig
 +
 +-- | Get the information related to balancing for the maintenance daemon.
 +maintenanceBalancing :: WConfdMonad (Bool, Double)
 +maintenanceBalancing = liftM ((maintBalance &&& maintBalanceThreshold)
 +                              . configMaintenance) CW.readConfig
 +
 +-- | Get the list of recently evacuated instances.
 +maintenanceEvacuated :: WConfdMonad [String]
 +maintenanceEvacuated = liftM (maintEvacuated . configMaintenance) CW.readConfig
 +
 +-- | Get the list of current incidents.
 +maintenanceIncidents :: WConfdMonad [Incident]
 +maintenanceIncidents = liftM (maintIncidents . configMaintenance) CW.readConfig
 +
  -- ** Temporary reservations related functions
  
  dropAllReservations :: ClientId -> WConfdMonad ()
@@@ -419,11 -395,7 +424,12 @@@ exportedFunctions = [ 'ech
                      , 'unlockConfig
                      , 'writeConfigAndUnlock
                      , 'flushConfig
+                     , 'flushConfigGroup
 +                    , 'maintenanceRoundDelay
 +                    , 'maintenanceJobs
 +                    , 'maintenanceBalancing
 +                    , 'maintenanceEvacuated
 +                    , 'maintenanceIncidents
                      -- temporary reservations (common)
                      , 'dropAllReservations
                      -- DRBD
@@@ -66,11 -66,10 +66,12 @@@ module Ganeti.WConfd.Mona
    , modifyTempResState
    , modifyTempResStateErr
    , readTempResState
+   , DistributionTarget(..)
    ) where
  
 -import Control.Applicative
 +import Prelude ()
 +import Ganeti.Prelude
 +
  import Control.Arrow ((&&&), second)
  import Control.Concurrent (forkIO, myThreadId)
  import Control.Exception.Lifted (bracket)