Revision cc25e437 htools/Ganeti/HTools/Types.hs

b/htools/Ganeti/HTools/Types.hs
48 48
    , unknownField
49 49
    , Placement
50 50
    , IMove(..)
51
    , DiskTemplate(..)
52
    , dtToString
53
    , dtFromString
51 54
    , MoveJob
52 55
    , JobSet
53 56
    , Result(..)
......
175 178
           | FailoverAndReplace Ndx  -- ^ Failover, replace secondary (f, r:ns)
176 179
             deriving (Show, Read)
177 180

  
181
-- | Instance disk template type
182
data DiskTemplate = DTDiskless
183
                  | DTFile
184
                  | DTSharedFile
185
                  | DTPlain
186
                  | DTBlock
187
                  | DTDrbd8
188
                    deriving (Show, Read, Eq)
189

  
190
-- | Converts a DiskTemplate to String
191
dtToString :: DiskTemplate -> String
192
dtToString DTDiskless   = C.dtDiskless
193
dtToString DTFile       = C.dtFile
194
dtToString DTSharedFile = C.dtSharedFile
195
dtToString DTPlain      = C.dtPlain
196
dtToString DTBlock      = C.dtBlock
197
dtToString DTDrbd8      = C.dtDrbd8
198

  
199
-- | Converts a DiskTemplate from String
200
dtFromString :: (Monad m) => String -> m DiskTemplate
201
dtFromString s =
202
    case () of
203
      _ | s == C.dtDiskless   -> return DTDiskless
204
        | s == C.dtFile       -> return DTFile
205
        | s == C.dtSharedFile -> return DTSharedFile
206
        | s == C.dtPlain      -> return DTPlain
207
        | s == C.dtBlock      -> return DTBlock
208
        | s == C.dtDrbd8      -> return DTDrbd8
209
        | otherwise           -> fail $ "Invalid disk template: " ++ s
210

  
211
instance JSON.JSON DiskTemplate where
212
    showJSON = JSON.showJSON . dtToString
213
    readJSON s = case JSON.readJSON s of
214
                   JSON.Ok s' -> dtFromString s'
215
                   JSON.Error e -> JSON.Error $
216
                                   "Can't parse disk_template as string: " ++ e
217

  
178 218
-- | Formatted solution output for one move (involved nodes and
179 219
-- commands.
180 220
type MoveJob = ([Ndx], Idx, IMove, [String])

Also available in: Unified diff