X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/2e7b8369cce64b9d4ec1368becf25a8ed3c640ff..5af3da74b7ecf4aa31ed8ddaad47bbf6c0953475:/scripts/gnt-cluster diff --git a/scripts/gnt-cluster b/scripts/gnt-cluster index 7bc85d5..f7f0bc3 100755 --- a/scripts/gnt-cluster +++ b/scripts/gnt-cluster @@ -34,6 +34,7 @@ from ganeti import errors from ganeti import utils from ganeti import bootstrap from ganeti import ssh +from ganeti import objects @UsesRPC @@ -69,44 +70,24 @@ 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 - for parameter in beparams: - if parameter not in constants.BES_PARAMETERS: - ToStderr("Invalid backend parameter: %s", parameter) - return 1 + nicparams = opts.nicparams # prepare beparams dict - 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 + beparams = objects.FillDict(constants.BEC_DEFAULTS, beparams) + utils.ForceDictType(beparams, constants.BES_PARAMETER_TYPES) - if not isinstance(beparams[constants.BE_MEMORY], int): - beparams[constants.BE_MEMORY] = utils.ParseUnit( - beparams[constants.BE_MEMORY]) + # prepare nicparams dict + nicparams = objects.FillDict(constants.NICC_DEFAULTS, nicparams) + utils.ForceDictType(nicparams, constants.NICS_PARAMETER_TYPES) # prepare hvparams dict for hv in constants.HYPER_TYPES: if hv not in hvparams: hvparams[hv] = {} - for parameter in constants.HVC_DEFAULTS[hv]: - if parameter not in hvparams[hv]: - hvparams[hv][parameter] = constants.HVC_DEFAULTS[hv][parameter] + hvparams[hv] = objects.FillDict(constants.HVC_DEFAULTS[hv], hvparams[hv]) + utils.ForceDictType(hvparams[hv], constants.HVS_PARAMETER_TYPES) for hv in hvlist: if hv not in constants.HYPER_TYPES: @@ -124,7 +105,9 @@ def InitCluster(opts, args): default_hypervisor=opts.default_hypervisor, hvparams=hvparams, beparams=beparams, + nicparams=nicparams, candidate_pool_size=opts.candidate_pool_size, + modify_etc_hosts=opts.modify_etc_hosts, ) return 0 @@ -222,7 +205,8 @@ def ShowClusterMaster(opts, args): @return: the desired exit code """ - ToStdout("%s", GetClient().QueryConfigValues(["master_node"])[0]) + master = bootstrap.GetMaster() + ToStdout(master) return 0 @@ -257,6 +241,10 @@ def ShowClusterConfig(opts, args): ToStdout("Cluster parameters:") ToStdout(" - candidate pool size: %s", result["candidate_pool_size"]) + ToStdout(" - master netdev: %s", result["master_netdev"]) + ToStdout(" - default bridge: %s", result["default_bridge"]) + ToStdout(" - lvm volume group: %s", result["volume_group_name"]) + ToStdout(" - file storage path: %s", result["file_storage_dir"]) ToStdout("Default instance parameters:") for gr_name, gr_dict in result["beparams"].items(): @@ -469,7 +457,8 @@ def SetClusterParams(opts, args): """ if not (not opts.lvm_storage or opts.vg_name or opts.enabled_hypervisors or opts.hvparams or - opts.beparams or opts.candidate_pool_size is not None): + opts.beparams or opts.nicparams or + opts.candidate_pool_size is not None): ToStderr("Please give at least one of the parameters.") return 1 @@ -477,22 +466,29 @@ def SetClusterParams(opts, args): if not opts.lvm_storage and opts.vg_name: ToStdout("Options --no-lvm-storage and --vg-name conflict.") return 1 + elif not opts.lvm_storage: + vg_name = '' hvlist = opts.enabled_hypervisors 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) + + nicparams = opts.nicparams + utils.ForceDictType(nicparams, constants.NICS_PARAMETER_TYPES) - op = opcodes.OpSetClusterParams(vg_name=opts.vg_name, + op = opcodes.OpSetClusterParams(vg_name=vg_name, enabled_hypervisors=hvlist, hvparams=hvparams, beparams=beparams, + nicparams=nicparams, candidate_pool_size=opts.candidate_pool_size) SubmitOpCode(op) return 0 @@ -520,6 +516,9 @@ def QueueOps(opts, args): else: val = "unset" ToStdout("The drain flag is %s" % val) + else: + raise errors.OpPrereqError("Command '%s' is not valid." % command) + return 0 # this is an option common to more than one command, so we declare @@ -569,6 +568,10 @@ commands = { help="No support for lvm based instances" " (cluster-wide)", action="store_false", default=True,), + make_option("--no-etc-hosts", dest="modify_etc_hosts", + help="Don't modify /etc/hosts" + " (cluster-wide)", + action="store_false", default=True,), make_option("--enabled-hypervisors", dest="enabled_hypervisors", help="Comma-separated list of hypervisors", type="string", default=None), @@ -587,6 +590,9 @@ commands = { keyval_option("-B", "--backend-parameters", dest="beparams", type="keyval", default={}, help="Backend parameters"), + keyval_option("-N", "--nic-parameters", dest="nicparams", + type="keyval", default={}, + help="NIC parameters"), make_option("-C", "--candidate-pool-size", default=constants.MASTER_POOL_SIZE_DEFAULT, help="Set the candidate pool size", @@ -666,6 +672,9 @@ commands = { keyval_option("-B", "--backend-parameters", dest="beparams", type="keyval", default={}, help="Backend parameters"), + keyval_option("-N", "--nic-parameters", dest="nicparams", + type="keyval", default={}, + help="NIC parameters"), make_option("-C", "--candidate-pool-size", default=None, help="Set the candidate pool size", dest="candidate_pool_size", type="int"),