Revision cc25e437
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