Verify individual disks in Instance
authorKlaus Aehlig <aehlig@google.com>
Tue, 9 Apr 2013 12:29:59 +0000 (14:29 +0200)
committerKlaus Aehlig <aehlig@google.com>
Thu, 11 Apr 2013 14:09:47 +0000 (16:09 +0200)
Instance policy on disks is specified on a per-disk basis. So extend
the instance description by the sizes of the individual disks and modify
the instance policy verification to correctly check individual disks.

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>

src/Ganeti/HTools/Instance.hs

index 9c20af1..6dd6c6b 100644 (file)
@@ -70,7 +70,8 @@ data Instance = Instance
   { name         :: String    -- ^ The instance name
   , alias        :: String    -- ^ The shortened name
   , mem          :: Int       -- ^ Memory of the instance
-  , dsk          :: Int       -- ^ Disk size of instance
+  , dsk          :: Int       -- ^ Total disk usage of the instance
+  , disks        :: [Int]     -- ^ Sizes of the individual disks
   , vcpus        :: Int       -- ^ Number of VCPUs
   , runSt        :: T.InstanceStatus -- ^ Original run status
   , pNode        :: T.Ndx     -- ^ Original primary node
@@ -171,6 +172,7 @@ create name_init mem_init dsk_init vcpus_init run_init tags_init
            , alias = name_init
            , mem = mem_init
            , dsk = dsk_init
+           , disks = [dsk_init]
            , vcpus = vcpus_init
            , runSt = run_init
            , pNode = pn
@@ -265,7 +267,7 @@ specOf Instance { mem = m, dsk = d, vcpus = c } =
 instBelowISpec :: Instance -> T.ISpec -> T.OpResult ()
 instBelowISpec inst ispec
   | mem inst > T.iSpecMemorySize ispec = Bad T.FailMem
-  | dsk inst > T.iSpecDiskSize ispec   = Bad T.FailDisk
+  | any (> T.iSpecDiskSize ispec) (disks inst) = Bad T.FailDisk
   | vcpus inst > T.iSpecCpuCount ispec = Bad T.FailCPU
   | otherwise = Ok ()
 
@@ -273,7 +275,7 @@ instBelowISpec inst ispec
 instAboveISpec :: Instance -> T.ISpec -> T.OpResult ()
 instAboveISpec inst ispec
   | mem inst < T.iSpecMemorySize ispec = Bad T.FailMem
-  | dsk inst < T.iSpecDiskSize ispec   = Bad T.FailDisk
+  | any (< T.iSpecDiskSize ispec) (disks inst) = Bad T.FailDisk
   | vcpus inst < T.iSpecCpuCount ispec = Bad T.FailCPU
   | otherwise = Ok ()