master daemon: allow skipping the voting process
[ganeti-local] / scripts / gnt-cluster
index 9cd1f52..928e0ac 100755 (executable)
@@ -69,13 +69,7 @@ def InitCluster(opts, args):
              (opts.default_hypervisor, hvlist))
     return 1
 
-  hvparams = opts.hvparams
-  if hvparams:
-    # a list of (name, dict) we can pass directly to dict()
-    hvparams = dict(opts.hvparams)
-  else:
-    # otherwise init as empty dict
-    hvparams = {}
+  hvparams = dict(opts.hvparams)
 
   beparams = opts.beparams
   # check for invalid parameters
@@ -88,17 +82,7 @@ def InitCluster(opts, args):
   for parameter in constants.BES_PARAMETERS:
     if parameter not in beparams:
       beparams[parameter] = constants.BEC_DEFAULTS[parameter]
-
-  # type wrangling
-  try:
-    beparams[constants.BE_VCPUS] = int(beparams[constants.BE_VCPUS])
-  except ValueError:
-    ToStderr("%s must be an integer", constants.BE_VCPUS)
-    return 1
-
-  if not isinstance(beparams[constants.BE_MEMORY], int):
-    beparams[constants.BE_MEMORY] = utils.ParseUnit(
-        beparams[constants.BE_MEMORY])
+  utils.ForceDictType(beparams, constants.BES_PARAMETER_TYPES)
 
   # prepare hvparams dict
   for hv in constants.HYPER_TYPES:
@@ -107,6 +91,7 @@ def InitCluster(opts, args):
     for parameter in constants.HVC_DEFAULTS[hv]:
       if parameter not in hvparams[hv]:
         hvparams[hv][parameter] = constants.HVC_DEFAULTS[hv][parameter]
+    utils.ForceDictType(hvparams[hv], constants.HVS_PARAMETER_TYPES)
 
   for hv in hvlist:
     if hv not in constants.HYPER_TYPES:
@@ -187,7 +172,7 @@ def RedistributeConfig(opts, args):
   @return: the desired exit code
 
   """
-  op = opcodes.OpRedistributeConf()
+  op = opcodes.OpRedistributeConfig()
   SubmitOrSend(op, opts)
   return 0
 
@@ -202,8 +187,8 @@ def ShowClusterVersion(opts, args):
   @return: the desired exit code
 
   """
-  op = opcodes.OpQueryClusterInfo()
-  result = SubmitOpCode(op)
+  cl = GetClient()
+  result = cl.QueryClusterInfo()
   ToStdout("Software version: %s", result["software_version"])
   ToStdout("Internode protocol: %s", result["protocol_version"])
   ToStdout("Configuration format: %s", result["config_version"])
@@ -236,8 +221,8 @@ def ShowClusterConfig(opts, args):
   @return: the desired exit code
 
   """
-  op = opcodes.OpQueryClusterInfo()
-  result = SubmitOpCode(op)
+  cl = GetClient()
+  result = cl.QueryClusterInfo()
 
   ToStdout("Cluster name: %s", result["name"])
 
@@ -482,12 +467,13 @@ def SetClusterParams(opts, args):
   if hvlist is not None:
     hvlist = hvlist.split(",")
 
-  hvparams = opts.hvparams
-  if hvparams:
-    # a list of (name, dict) we can pass directly to dict()
-    hvparams = dict(opts.hvparams)
+  # a list of (name, dict) we can pass directly to dict() (or [])
+  hvparams = dict(opts.hvparams)
+  for hv, hv_params in hvparams.iteritems():
+    utils.ForceDictType(hv_params, constants.HVS_PARAMETER_TYPES)
 
   beparams = opts.beparams
+  utils.ForceDictType(beparams, constants.BES_PARAMETER_TYPES)
 
   op = opcodes.OpSetClusterParams(vg_name=opts.vg_name,
                                   enabled_hypervisors=hvlist,