diff --git a/src/Ganeti/HTools/Types.hs b/src/Ganeti/HTools/Types.hs
index b006dde79d3b8acb2b0867f822ec45d090714ac4..735ae5ea9aff3eaa28f982d703e0d53b98db7f2b 100644
--- a/src/Ganeti/HTools/Types.hs
+++ b/src/Ganeti/HTools/Types.hs
@@ -78,9 +78,14 @@ module Ganeti.HTools.Types
, AutoRepairResult(..)
, autoRepairResultToRaw
, autoRepairResultFromRaw
+ , AutoRepairPolicy(..)
+ , AutoRepairSuspendTime(..)
+ , AutoRepairData(..)
+ , AutoRepairStatus(..)
) where
import qualified Data.Map as M
+import System.Time (ClockTime)
import qualified Ganeti.Constants as C
import qualified Ganeti.THH as THH
@@ -369,3 +374,30 @@ $(THH.declareSADT "AutoRepairResult"
, ("ArFailure", 'C.autoRepairFailure)
, ("ArEnoperm", 'C.autoRepairEnoperm)
])
+
+-- | The possible auto-repair policy for a given instance.
+data AutoRepairPolicy
+ = ArEnabled AutoRepairType -- ^ Auto-repair explicitly enabled
+ | ArSuspended AutoRepairSuspendTime -- ^ Suspended temporarily, or forever
+ | ArNotEnabled -- ^ Auto-repair not explicitly enabled
+ deriving (Eq, Show)
+
+-- | The suspend timeout for 'ArSuspended'.
+data AutoRepairSuspendTime = Forever -- ^ Permanently suspended
+ | Until ClockTime -- ^ Suspended up to a certain time
+ deriving (Eq, Show)
+
+-- | The possible auto-repair states for any given instance.
+data AutoRepairStatus
+ = ArHealthy -- ^ No problems detected with the instance
+ | ArNeedsRepair AutoRepairData -- ^ Instance has problems, no action taken
+ | ArPendingRepair AutoRepairData -- ^ Repair jobs ongoing for the instance
+ | ArFailedRepair AutoRepairData -- ^ Some repair jobs for the instance failed
+
+-- | The data accompanying a repair operation (future, pending, or failed).
+data AutoRepairData = AutoRepairData { arType :: AutoRepairType
+ , arUuid :: String
+ , arTime :: ClockTime
+ , arJobs :: [JobId]
+ , arResult :: Maybe AutoRepairResult
+ }