diff --git a/test/hs/Test/Ganeti/Objects.hs b/test/hs/Test/Ganeti/Objects.hs
index 23ea054eb96c4ac3ff844b596b2786877055d287..9fdaec4b33e5e8163341183acad9ed6df6882da8 100644
--- a/test/hs/Test/Ganeti/Objects.hs
+++ b/test/hs/Test/Ganeti/Objects.hs
@@ -31,6 +31,8 @@ module Test.Ganeti.Objects
   ( testObjects
   , Node(..)
   , genConfigDataWithNetworks
+  , genDisk
+  , genDiskWithChildren
   , genEmptyCluster
   , genInstWithNets
   , genValidNetwork
@@ -140,6 +142,21 @@ genInstWithNets nets = do
       new_inst = plain_inst { instNics = partial_nics }
   return new_inst
 
+genDiskWithChildren :: Int -> Gen Disk
+genDiskWithChildren num_children = do
+  logicalid <- arbitrary
+  children <- vectorOf num_children (genDiskWithChildren 0)
+  ivname <- genName
+  size <- arbitrary
+  mode <- arbitrary
+  name <- genMaybe genName
+  uuid <- genName
+  let disk = Disk logicalid children ivname size mode name uuid
+  return disk
+
+genDisk :: Gen Disk
+genDisk = genDiskWithChildren 3
+
 -- | FIXME: This generates completely random data, without normal
 -- validation rules.
 $(genArbitrary ''PartialISpecParams)