Revision 9b9e088c

b/lib/constants.py
519 519
DISK_RDONLY = _constants.DISK_RDONLY
520 520
DISK_RDWR = _constants.DISK_RDWR
521 521
DISK_ACCESS_SET = _constants.DISK_ACCESS_SET
522
DISK_USERSPACE = _constants.DISK_USERSPACE
523
DISK_KERNELSPACE = _constants.DISK_KERNELSPACE
524
DISK_VALID_ACCESS_MODES = _constants.DISK_VALID_ACCESS_MODES
522 525

  
523 526
# disk replacement mode
524 527
REPLACE_DISK_PRI = "replace_on_primary"    # replace disks on primary
......
1105 1108
LDP_MAX_RATE = "c-max-rate"
1106 1109
LDP_MIN_RATE = "c-min-rate"
1107 1110
LDP_POOL = "pool"
1111
LDP_ACCESS = "access"
1108 1112
DISK_LD_TYPES = {
1109 1113
  LDP_RESYNC_RATE: VTYPE_INT,
1110 1114
  LDP_STRIPES: VTYPE_INT,
......
1121 1125
  LDP_MAX_RATE: VTYPE_INT,
1122 1126
  LDP_MIN_RATE: VTYPE_INT,
1123 1127
  LDP_POOL: VTYPE_STRING,
1128
  LDP_ACCESS: VTYPE_STRING,
1124 1129
  }
1125 1130
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
1126 1131

  
......
1143 1148
DRBD_MIN_RATE = "c-min-rate"
1144 1149
LV_STRIPES = "stripes"
1145 1150
RBD_POOL = "pool"
1151
RBD_ACCESS = "access"
1146 1152
DISK_DT_TYPES = {
1147 1153
  DRBD_RESYNC_RATE: VTYPE_INT,
1148 1154
  DRBD_DATA_STRIPES: VTYPE_INT,
......
1161 1167
  DRBD_MIN_RATE: VTYPE_INT,
1162 1168
  LV_STRIPES: VTYPE_INT,
1163 1169
  RBD_POOL: VTYPE_STRING,
1170
  RBD_ACCESS: VTYPE_STRING,
1164 1171
  }
1165 1172

  
1166 1173
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
......
1953 1960
  DT_SHARED_FILE: {},
1954 1961
  DT_BLOCK: {},
1955 1962
  DT_RBD: {
1956
    LDP_POOL: "rbd"
1963
    LDP_POOL: "rbd",
1964
    LDP_ACCESS: DISK_KERNELSPACE,
1957 1965
    },
1958 1966
  DT_EXT: {},
1959 1967
  }
......
1988 1996
  DT_SHARED_FILE: {},
1989 1997
  DT_BLOCK: {},
1990 1998
  DT_RBD: {
1991
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL]
1999
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
2000
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
1992 2001
    },
1993 2002
  DT_EXT: {},
1994 2003
  }
b/lib/objects.py
897 897
    elif disk_template == constants.DT_RBD:
898 898
      result.append(FillDict(constants.DISK_LD_DEFAULTS[constants.DT_RBD], {
899 899
        constants.LDP_POOL: dt_params[constants.RBD_POOL],
900
        constants.LDP_ACCESS: dt_params[constants.RBD_ACCESS],
900 901
        }))
901 902

  
902 903
    elif disk_template == constants.DT_EXT:
b/src/Ganeti/HsConstants.hs
1368 1368
-- | Mond's variable for periodical data collection
1369 1369
mondTimeInterval :: Int
1370 1370
mondTimeInterval = 5
1371

  
1372
-- * Disk access modes
1373

  
1374
diskUserspace :: String
1375
diskUserspace = Types.diskAccessModeToRaw DiskUserspace
1376

  
1377
diskKernelspace :: String
1378
diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
1379

  
1380
diskValidAccessModes :: FrozenSet String
1381
diskValidAccessModes =
1382
  ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
b/src/Ganeti/Types.hs
141 141
  , adminStateToRaw
142 142
  , StorageField(..)
143 143
  , storageFieldToRaw
144
  , DiskAccessMode(..)
145
  , diskAccessModeToRaw
144 146
  ) where
145 147

  
146 148
import Control.Monad (liftM)
......
282 284
       ])
283 285
$(THH.makeJSONInstance ''DiskTemplate)
284 286

  
287
instance THH.PyValue DiskTemplate where
288
  showValue = show . diskTemplateToRaw
289

  
285 290
instance HasStringRepr DiskTemplate where
286 291
  fromStringRepr = diskTemplateFromRaw
287 292
  toStringRepr = diskTemplateToRaw
......
406 411
  ])
407 412
$(THH.makeJSONInstance ''Hypervisor)
408 413

  
414
instance THH.PyValue Hypervisor where
415
  showValue = show . hypervisorToRaw
416

  
409 417
-- | Oob command type.
410 418
$(THH.declareLADT ''String "OobCommand"
411 419
  [ ("OobHealth",      "health")
......
763 771
  , ( "SFSize",        "size")
764 772
  ])
765 773
$(THH.makeJSONInstance ''StorageField)
774

  
775
-- * Disk access protocol
776

  
777
$(THH.declareLADT ''String "DiskAccessMode"
778
  [ ( "DiskUserspace",   "userspace")
779
  , ( "DiskKernelspace", "kernelspace")
780
  ])
781
$(THH.makeJSONInstance ''DiskAccessMode)
b/test/py/cmdlib/cluster_unittest.py
425 425

  
426 426
  def testInvalidDiskparams(self):
427 427
    for diskparams in [{constants.DT_DISKLESS: {constants.LV_STRIPES: 0}},
428
                       {constants.DT_DRBD8: {constants.RBD_POOL: "pool"}}]:
428
                       {constants.DT_DRBD8: {constants.RBD_POOL: "pool"}},
429
                       {constants.DT_DRBD8: {constants.RBD_ACCESS: "bunny"}}]:
429 430
      self.ResetMocks()
430 431
      op = opcodes.OpClusterSetParams(diskparams=diskparams)
431 432
      self.ExecOpCodeExpectOpPrereqError(op, "verify diskparams")
432 433

  
433 434
  def testValidDiskparams(self):
434
    diskparams = {constants.DT_RBD: {constants.RBD_POOL: "mock_pool"}}
435
    diskparams = {constants.DT_RBD: {constants.RBD_POOL: "mock_pool",
436
                                     constants.RBD_ACCESS: "kernelspace"}}
435 437
    op = opcodes.OpClusterSetParams(diskparams=diskparams)
436 438
    self.ExecOpCode(op)
437 439
    self.assertEqual(diskparams[constants.DT_RBD],

Also available in: Unified diff