.. so that they can be persisted.
Signed-off-by: Petr Pudlak <[email protected]>
---
src/Ganeti/Utils/MultiMap.hs | 5 +++++
src/Ganeti/WConfd/TempRes.hs | 19 ++++++++++++-------
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/src/Ganeti/Utils/MultiMap.hs b/src/Ganeti/Utils/MultiMap.hs
index 26243f5..714f9d2 100644
--- a/src/Ganeti/Utils/MultiMap.hs
+++ b/src/Ganeti/Utils/MultiMap.hs
@@ -52,6 +52,7 @@ import qualified Data.Map as M
import Data.Maybe (fromMaybe, isJust)
import Data.Monoid
import qualified Data.Set as S
+import qualified Text.JSON as J
import Ganeti.Lens
@@ -68,6 +69,10 @@ instance (Ord v, Ord k) => Monoid (MultiMap k v) where
instance F.Foldable (MultiMap k) where
foldMap f = F.foldMap (F.foldMap f) . getMultiMap
+instance (J.JSON k, Ord k, J.JSON v, Ord v) => J.JSON (MultiMap k v) where
+ showJSON = J.showJSON . getMultiMap
+ readJSON = liftM MultiMap . J.readJSON
+
-- | A 'Lens' that allows to access a set under a given key in a multi-map.
multiMapL :: (Ord k, Ord v) => k -> Lens' (MultiMap k v) (S.Set v)
multiMapL k f = fmap MultiMap
diff --git a/src/Ganeti/WConfd/TempRes.hs b/src/Ganeti/WConfd/TempRes.hs
index a2b32e4..110d5e3 100644
--- a/src/Ganeti/WConfd/TempRes.hs
+++ b/src/Ganeti/WConfd/TempRes.hs
@@ -63,6 +63,7 @@ import qualified Data.Map as M
import Data.Monoid
import qualified Data.Set as S
import System.Random
+import qualified Text.JSON as J
import Ganeti.BasicTypes
import Ganeti.Config
@@ -72,6 +73,7 @@ import qualified Ganeti.JSON as J
import Ganeti.Lens
import Ganeti.Locking.Locks (ClientId)
import Ganeti.Objects
+import Ganeti.THH
import Ganeti.Utils
import Ganeti.Utils.MonadPlus
import Ganeti.Utils.Random
@@ -106,14 +108,17 @@ instance (Ord j, Ord a) => Monoid (TempRes j a) where
mempty = TempRes mempty
mappend (TempRes x) (TempRes y) = TempRes $ x <> y
+instance (J.JSON j, Ord j, J.JSON a, Ord a) => J.JSON (TempRes j a) where
+ showJSON = J.showJSON . getTempRes
+ readJSON = liftM TempRes . J.readJSON
+
-- | The state of the temporary reservations
-data TempResState = TempResState
- { trsDRBD :: DRBDMap
- , trsMACs :: TempRes ClientId MAC
- , trsDRBDSecrets :: TempRes ClientId DRBDSecret
- , trsLVs :: TempRes ClientId LogicalVolume
- }
- deriving (Eq, Show)
+$(buildObject "TempResState" "trs" $
+ [ simpleField "dRBD" [t| DRBDMap |]
+ , simpleField "mACs" [t| TempRes ClientId MAC |]
+ , simpleField "dRBDSecrets" [t| TempRes ClientId DRBDSecret |]
+ , simpleField "lVs" [t| TempRes ClientId LogicalVolume |]
+ ])
emptyTempResState :: TempResState
emptyTempResState = TempResState M.empty mempty mempty mempty
--
2.0.0.526.g5318336