Revision c121d42f

b/lib/client/gnt_cluster.py
76 76
    return 1
77 77

  
78 78

  
79
def _InitEnabledDiskTemplates(opts):
80
  """Initialize the list of enabled disk templates.
81

  
82
  """
83
  if opts.enabled_disk_templates:
84
    return opts.enabled_disk_templates.split(",")
85
  else:
86
    return constants.DEFAULT_ENABLED_DISK_TEMPLATES
87

  
88

  
89
def _InitVgName(opts, enabled_disk_templates):
90
  """Initialize the volume group name.
91

  
92
  @type enabled_disk_templates: list of strings
93
  @param enabled_disk_templates: cluster-wide enabled disk templates
94

  
95
  """
96
  vg_name = None
97
  if opts.vg_name is not None:
98
    vg_name = opts.vg_name
99
    if vg_name:
100
      if not utils.IsLvmEnabled(enabled_disk_templates):
101
        ToStdout("You specified a volume group with --vg-name, but you did not"
102
                 " enable any disk template that uses lvm.")
103
    elif utils.IsLvmEnabled(enabled_disk_templates):
104
      raise errors.OpPrereqError(
105
          "LVM disk templates are enabled, but vg name not set.")
106
  elif utils.IsLvmEnabled(enabled_disk_templates):
107
    vg_name = constants.DEFAULT_VG
108
  return vg_name
109

  
110

  
111
def _InitDrbdHelper(opts):
112
  """Initialize the DRBD usermode helper.
113

  
114
  """
115
  if not opts.drbd_storage and opts.drbd_helper:
116
    raise errors.OpPrereqError(
117
        "Options --no-drbd-storage and --drbd-usermode-helper conflict.")
118

  
119
  if opts.drbd_storage and not opts.drbd_helper:
120
    return constants.DEFAULT_DRBD_HELPER
121

  
122
  return opts.drbd_helper
123

  
124

  
79 125
@UsesRPC
80 126
def InitCluster(opts, args):
81 127
  """Initialize the cluster.
......
90 136
  """
91 137
  if _CheckNoLvmStorageOptDeprecated(opts):
92 138
    return 1
93
  enabled_disk_templates = opts.enabled_disk_templates
94
  if enabled_disk_templates:
95
    enabled_disk_templates = enabled_disk_templates.split(",")
96
  else:
97
    enabled_disk_templates = constants.DEFAULT_ENABLED_DISK_TEMPLATES
98 139

  
99
  vg_name = None
100
  if opts.vg_name is not None:
101
    vg_name = opts.vg_name
102
    if vg_name:
103
      if not utils.IsLvmEnabled(enabled_disk_templates):
104
        ToStdout("You specified a volume group with --vg-name, but you did not"
105
                 " enable any disk template that uses lvm.")
106
    else:
107
      if utils.IsLvmEnabled(enabled_disk_templates):
108
        ToStderr("LVM disk templates are enabled, but vg name not set.")
109
        return 1
110
  else:
111
    if utils.IsLvmEnabled(enabled_disk_templates):
112
      vg_name = constants.DEFAULT_VG
140
  enabled_disk_templates = _InitEnabledDiskTemplates(opts)
113 141

  
114
  if not opts.drbd_storage and opts.drbd_helper:
115
    ToStderr("Options --no-drbd-storage and --drbd-usermode-helper conflict.")
142
  try:
143
    vg_name = _InitVgName(opts, enabled_disk_templates)
144
    drbd_helper = _InitDrbdHelper(opts)
145
  except errors.OpPrereqError, e:
146
    ToStderr(str(e))
116 147
    return 1
117 148

  
118
  drbd_helper = opts.drbd_helper
119
  if opts.drbd_storage and not opts.drbd_helper:
120
    drbd_helper = constants.DEFAULT_DRBD_HELPER
121

  
122 149
  master_netdev = opts.master_netdev
123 150
  if master_netdev is None:
124 151
    nic_mode = opts.nicparams.get(constants.NIC_MODE, None)
......
971 998
                      opts.force)
972 999

  
973 1000

  
1001
def _GetEnabledDiskTemplates(opts):
1002
  """Determine the list of enabled disk templates.
1003

  
1004
  """
1005
  if opts.enabled_disk_templates:
1006
    return opts.enabled_disk_templates.split(",")
1007
  else:
1008
    return None
1009

  
1010

  
1011
def _GetVgName(opts, enabled_disk_templates):
1012
  """Determine the volume group name.
1013

  
1014
  @type enabled_disk_templates: list of strings
1015
  @param enabled_disk_templates: cluster-wide enabled disk-templates
1016

  
1017
  """
1018
  # consistency between vg name and enabled disk templates
1019
  vg_name = None
1020
  if opts.vg_name is not None:
1021
    vg_name = opts.vg_name
1022
  if enabled_disk_templates:
1023
    if vg_name and not utils.IsLvmEnabled(enabled_disk_templates):
1024
      ToStdout("You specified a volume group with --vg-name, but you did not"
1025
               " enable any of the following lvm-based disk templates: %s" %
1026
               utils.CommaJoin(utils.GetLvmDiskTemplates()))
1027
  return vg_name
1028

  
1029

  
1030
def _GetDrbdHelper(opts):
1031
  """Determine the DRBD usermode helper.
1032

  
1033
  """
1034
  drbd_helper = opts.drbd_helper
1035
  if not opts.drbd_storage and opts.drbd_helper:
1036
    raise errors.OpPrereqError(
1037
        "Options --no-drbd-storage and --drbd-usermode-helper conflict.")
1038

  
1039
  if not opts.drbd_storage:
1040
    drbd_helper = ""
1041
  return drbd_helper
1042

  
1043

  
974 1044
def SetClusterParams(opts, args):
975 1045
  """Modify the cluster.
976 1046

  
......
1012 1082
  if _CheckNoLvmStorageOptDeprecated(opts):
1013 1083
    return 1
1014 1084

  
1015
  enabled_disk_templates = None
1016
  if opts.enabled_disk_templates:
1017
    enabled_disk_templates = opts.enabled_disk_templates.split(",")
1018

  
1019
  # consistency between vg name and enabled disk templates
1020
  vg_name = None
1021
  if opts.vg_name is not None:
1022
    vg_name = opts.vg_name
1023
  if enabled_disk_templates:
1024
    if vg_name and not utils.IsLvmEnabled(enabled_disk_templates):
1025
      ToStdout("You specified a volume group with --vg-name, but you did not"
1026
               " enable any of the following lvm-based disk templates: %s" %
1027
               utils.CommaJoin(utils.GetLvmDiskTemplates()))
1085
  enabled_disk_templates = _GetEnabledDiskTemplates(opts)
1086
  vg_name = _GetVgName(opts, enabled_disk_templates)
1028 1087

  
1029
  drbd_helper = opts.drbd_helper
1030
  if not opts.drbd_storage and opts.drbd_helper:
1031
    ToStderr("Options --no-drbd-storage and --drbd-usermode-helper conflict.")
1088
  try:
1089
    drbd_helper = _GetDrbdHelper(opts)
1090
  except errors.OpPrereqError, e:
1091
    ToStderr(str(e))
1032 1092
    return 1
1033 1093

  
1034
  if not opts.drbd_storage:
1035
    drbd_helper = ""
1036

  
1037 1094
  hvlist = opts.enabled_hypervisors
1038 1095
  if hvlist is not None:
1039 1096
    hvlist = hvlist.split(",")
b/test/py/ganeti.client.gnt_cluster_unittest.py
24 24
import unittest
25 25
import optparse
26 26

  
27
from ganeti import errors
27 28
from ganeti.client import gnt_cluster
28 29
from ganeti import utils
29 30
from ganeti import compat
30 31
from ganeti import constants
31 32

  
33
import mock
32 34
import testutils
33 35

  
34 36

  
......
258 260
    self.assertEqual(result, constants.EXIT_FAILURE)
259 261

  
260 262

  
263
class InitDrbdHelper(unittest.TestCase):
264

  
265
  def testNoDrbdNoHelper(self):
266
    opts = mock.Mock()
267
    opts.drbd_storage = False
268
    opts.drbd_helper = None
269
    helper = gnt_cluster._InitDrbdHelper(opts)
270
    self.assertEquals(None, helper)
271

  
272
  def testNoDrbdHelper(self):
273
    opts = mock.Mock()
274
    opts.drbd_storage = None
275
    opts.drbd_helper = "/bin/true"
276
    self.assertRaises(errors.OpPrereqError, gnt_cluster._InitDrbdHelper, opts)
277

  
278
  def testDrbdNoHelper(self):
279
    opts = mock.Mock()
280
    opts.drbd_storage = True
281
    opts.drbd_helper = None
282
    helper = gnt_cluster._InitDrbdHelper(opts)
283
    self.assertEquals(constants.DEFAULT_DRBD_HELPER, helper)
284

  
285
  def testDrbdHelper(self):
286
    opts = mock.Mock()
287
    opts.drbd_storage = True
288
    opts.drbd_helper = "/bin/true"
289
    helper = gnt_cluster._InitDrbdHelper(opts)
290
    self.assertEquals(opts.drbd_helper, helper)
291

  
292

  
293
class GetDrbdHelper(unittest.TestCase):
294

  
295
  def testNoDrbdNoHelper(self):
296
    opts = mock.Mock()
297
    opts.drbd_storage = False
298
    opts.drbd_helper = None
299
    helper = gnt_cluster._GetDrbdHelper(opts)
300
    self.assertEquals("", helper)
301

  
302
  def testNoDrbdHelper(self):
303
    opts = mock.Mock()
304
    opts.drbd_storage = None
305
    opts.drbd_helper = "/bin/true"
306
    self.assertRaises(errors.OpPrereqError, gnt_cluster._GetDrbdHelper, opts)
307

  
308
  def testDrbdNoHelper(self):
309
    opts = mock.Mock()
310
    opts.drbd_storage = True
311
    opts.drbd_helper = None
312
    helper = gnt_cluster._GetDrbdHelper(opts)
313
    self.assertEquals(None, helper)
314

  
315
  def testDrbdHelper(self):
316
    opts = mock.Mock()
317
    opts.drbd_storage = True
318
    opts.drbd_helper = "/bin/true"
319
    helper = gnt_cluster._GetDrbdHelper(opts)
320
    self.assertEquals(opts.drbd_helper, helper)
321

  
322

  
261 323
if __name__ == "__main__":
262 324
  testutils.GanetiTestProgram()

Also available in: Unified diff