X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/2f79bd34cf17210ba62ab6cad9cdd6a4bdcf1c3d..00dd83262231dbe60b87b2b8507f52c72e781758:/scripts/gnt-cluster?ds=inline diff --git a/scripts/gnt-cluster b/scripts/gnt-cluster index 6b2e939..9ebd10f 100755 --- a/scripts/gnt-cluster +++ b/scripts/gnt-cluster @@ -39,9 +39,12 @@ from ganeti import ssh def InitCluster(opts, args): """Initialize the cluster. - Args: - opts - class with options as members - args - list of arguments, expected to be [clustername] + @param opts: the command line options selected by the user + @type args: list + @param args: should contain only one element, the desired + cluster name + @rtype: int + @return: the desired exit code """ if not opts.lvm_storage and opts.vg_name: @@ -56,7 +59,13 @@ def InitCluster(opts, args): if hvlist is not None: hvlist = hvlist.split(",") else: - hvlist = constants.DEFAULT_ENABLED_HYPERVISOR + hvlist = [constants.DEFAULT_ENABLED_HYPERVISOR] + + # avoid an impossible situation + if opts.default_hypervisor in hvlist: + default_hypervisor = opts.default_hypervisor + else: + default_hypervisor = hvlist[0] hvparams = opts.hvparams if hvparams: @@ -70,7 +79,7 @@ def InitCluster(opts, args): # check for invalid parameters for parameter in beparams: if parameter not in constants.BES_PARAMETERS: - print "Invalid backend parameter: %s" % parameter + ToStderr("Invalid backend parameter: %s", parameter) return 1 # prepare beparams dict @@ -82,10 +91,12 @@ def InitCluster(opts, args): try: beparams[constants.BE_VCPUS] = int(beparams[constants.BE_VCPUS]) except ValueError: - print "%s must be an integer" % constants.BE_VCPUS + ToStderr("%s must be an integer", constants.BE_VCPUS) return 1 - beparams[constants.BE_MEMORY] = utils.ParseUnit(beparams[constants.BE_MEMORY]) + if not isinstance(beparams[constants.BE_MEMORY], int): + beparams[constants.BE_MEMORY] = utils.ParseUnit( + beparams[constants.BE_MEMORY]) # prepare hvparams dict for hv in constants.HYPER_TYPES: @@ -97,7 +108,7 @@ def InitCluster(opts, args): for hv in hvlist: if hv not in constants.HYPER_TYPES: - print "invalid hypervisor: %s" % hv + ToStderr("invalid hypervisor: %s", hv) return 1 bootstrap.InitCluster(cluster_name=args[0], @@ -108,6 +119,7 @@ def InitCluster(opts, args): master_netdev=opts.master_netdev, file_storage_dir=opts.file_storage_dir, enabled_hypervisors=hvlist, + default_hypervisor=default_hypervisor, hvparams=hvparams, beparams=beparams) return 0 @@ -116,8 +128,11 @@ def InitCluster(opts, args): def DestroyCluster(opts, args): """Destroy the cluster. - Args: - opts - class with options as members + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code """ if not opts.yes_do_it: @@ -136,9 +151,11 @@ def DestroyCluster(opts, args): def RenameCluster(opts, args): """Rename the cluster. - Args: - opts - class with options as members, we use force only - args - list of arguments, expected to be [new_name] + @param opts: the command line options selected by the user + @type args: list + @param args: should contain only one element, the new cluster name + @rtype: int + @return: the desired exit code """ name = args[0] @@ -158,8 +175,11 @@ def RenameCluster(opts, args): def ShowClusterVersion(opts, args): """Write version of ganeti software to the standard output. - Args: - opts - class with options as members + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code """ op = opcodes.OpQueryClusterInfo() @@ -175,8 +195,11 @@ def ShowClusterVersion(opts, args): def ShowClusterMaster(opts, args): """Write name of master node to the standard output. - Args: - opts - class with options as members + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code """ ToStdout("%s", GetClient().QueryConfigValues(["master_node"])[0]) @@ -186,6 +209,12 @@ def ShowClusterMaster(opts, args): def ShowClusterConfig(opts, args): """Shows cluster information. + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code + """ op = opcodes.OpQueryClusterInfo() result = SubmitOpCode(op) @@ -197,7 +226,7 @@ def ShowClusterConfig(opts, args): ToStdout("Architecture (this node): %s (%s)", result["architecture"][0], result["architecture"][1]) - ToStdout("Default hypervisor: %s", result["hypervisor_type"]) + ToStdout("Default hypervisor: %s", result["default_hypervisor"]) ToStdout("Enabled hypervisors: %s", ", ".join(result["enabled_hypervisors"])) ToStdout("Hypervisor parameters:") @@ -218,11 +247,12 @@ def ShowClusterConfig(opts, args): def ClusterCopyFile(opts, args): """Copy a file from master to some nodes. - Args: - opts - class with options as members - args - list containing a single element, the file name - Opts used: - nodes - list containing the name of target nodes; if empty, all nodes + @param opts: the command line options selected by the user + @type args: list + @param args: should contain only one element, the path of + the file to be copied + @rtype: int + @return: the desired exit code """ filename = args[0] @@ -249,11 +279,11 @@ def ClusterCopyFile(opts, args): def RunClusterCommand(opts, args): """Run a command on some nodes. - Args: - opts - class with options as members - args - the command list as a list - Opts used: - nodes: list containing the name of target nodes; if empty, all nodes + @param opts: the command line options selected by the user + @type args: list + @param args: should contain the command to be run and its arguments + @rtype: int + @return: the desired exit code """ cl = GetClient() @@ -285,8 +315,11 @@ def RunClusterCommand(opts, args): def VerifyCluster(opts, args): """Verify integrity of cluster, performing various test on nodes. - Args: - opts - class with options as members + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code """ skip_checks = [] @@ -302,8 +335,11 @@ def VerifyCluster(opts, args): def VerifyDisks(opts, args): """Verify integrity of cluster disks. - Args: - opts - class with options as members + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code """ op = opcodes.OpVerifyDisks() @@ -367,6 +403,12 @@ def MasterFailover(opts, args): master to cease being master, and the non-master to become new master. + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code + """ return bootstrap.MasterFailover() @@ -374,6 +416,12 @@ def MasterFailover(opts, args): def SearchTags(opts, args): """Searches the tags on all the cluster. + @param opts: the command line options selected by the user + @type args: list + @param args: should contain only one element, the tag pattern + @rtype: int + @return: the desired exit code + """ op = opcodes.OpSearchTags(pattern=args[0]) result = SubmitOpCode(op) @@ -388,8 +436,11 @@ def SearchTags(opts, args): def SetClusterParams(opts, args): """Modify the cluster. - Args: - opts - class with options as members + @param opts: the command line options selected by the user + @type args: list + @param args: should be an empty list + @rtype: int + @return: the desired exit code """ if not (not opts.lvm_storage or opts.vg_name or @@ -425,6 +476,12 @@ def SetClusterParams(opts, args): def QueueOps(opts, args): """Queue operations. + @param opts: the command line options selected by the user + @type args: list + @param args: should contain only one element, the subcommand + @rtype: int + @return: the desired exit code + """ command = args[0] client = GetClient() @@ -490,6 +547,11 @@ commands = { make_option("--enabled-hypervisors", dest="enabled_hypervisors", help="Comma-separated list of hypervisors", type="string", default=None), + make_option("-t", "--default-hypervisor", + dest="default_hypervisor", + help="Default hypervisor to use for instance creation", + choices=list(constants.HYPER_TYPES), + default=constants.DEFAULT_ENABLED_HYPERVISOR), ikv_option("-H", "--hypervisor-parameters", dest="hvparams", help="Hypervisor and hypervisor options, in the" " format"