.. and also a function for dropping all reservations (currently just
MACs).

Signed-off-by: Petr Pudlak <[email protected]>
---
 src/Ganeti/WConfd/Core.hs | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/Ganeti/WConfd/Core.hs b/src/Ganeti/WConfd/Core.hs
index fe8ba85..355804a 100644
--- a/src/Ganeti/WConfd/Core.hs
+++ b/src/Ganeti/WConfd/Core.hs
@@ -32,9 +32,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 module Ganeti.WConfd.Core where
 
 import Control.Monad (liftM, unless, when)
+import Control.Monad.State (modify)
 import qualified Data.Map as M
 import qualified Data.Set as S
 import Language.Haskell.TH (Name)
+import qualified System.Random as Rand
 
 import Ganeti.BasicTypes
 import qualified Ganeti.JSON as J
@@ -110,6 +112,12 @@ flushConfig = forceConfigStateDistribution
 
 -- ** Temporary reservations related functions
 
+dropAllReservations :: ClientId -> WConfdMonad ()
+dropAllReservations cid =
+  modifyTempResState (const . modify $ T.dropAllReservations cid)
+
+-- *** DRBD
+
 computeDRBDMap :: WConfdMonad T.DRBDMap
 computeDRBDMap = uncurry T.computeDRBDMap =<< readTempResState
 
@@ -133,6 +141,20 @@ releaseDRBDMinors
   :: T.InstanceUUID -> WConfdMonad ()
 releaseDRBDMinors inst = modifyTempResState (const $ T.releaseDRBDMinors inst)
 
+-- *** MACs
+
+-- Randomly generate a MAC for an instance and reserves it for
+-- a given client.
+generateMAC
+  :: ClientId -> J.MaybeForJSON T.NetworkUUID -> WConfdMonad T.MAC
+generateMAC cid (J.MaybeForJSON netId) = do
+  g <- liftIO Rand.newStdGen
+  modifyTempResStateErr $ T.generateMAC g cid netId
+
+-- Reserves a MAC for an instance in the list of temporary reservations.
+reserveMAC :: ClientId -> T.MAC -> WConfdMonad ()
+reserveMAC = (modifyTempResStateErr .) . T.reserveMAC
+
 -- ** Locking related functions
 
 -- | List the locks of a given owner (i.e., a job-id lockfile pair).
@@ -195,10 +217,15 @@ exportedFunctions = [ 'echo
                     , 'lockConfig
                     , 'unlockConfig
                     , 'flushConfig
-                    -- temporary reservations
+                    -- temporary reservations (common)
+                    , 'dropAllReservations
+                    -- DRBD
                     , 'computeDRBDMap
                     , 'allocateDRBDMinor
                     , 'releaseDRBDMinors
+                    -- MACs
+                    , 'reserveMAC
+                    , 'generateMAC
                     -- locking
                     , 'listLocks
                     , 'listAllLocks
-- 
1.9.1.423.g4596e3a

Reply via email to