# W0401: Wildcard import ganeti.cli
# W0614: Unused import %s from wildcard import (since we need cli)
+from cStringIO import StringIO
+
from ganeti.cli import *
from ganeti import constants
from ganeti import opcodes
"""
ipolicy = CreateIPolicyFromOpts(
- ispecs_mem_size=opts.ispecs_mem_size,
- ispecs_cpu_count=opts.ispecs_cpu_count,
- ispecs_disk_count=opts.ispecs_disk_count,
- ispecs_disk_size=opts.ispecs_disk_size,
- ispecs_nic_count=opts.ispecs_nic_count,
+ minmax_ispecs=opts.ipolicy_bounds_specs,
ipolicy_vcpu_ratio=opts.ipolicy_vcpu_ratio,
ipolicy_spindle_ratio=opts.ipolicy_spindle_ratio,
+ ipolicy_disk_templates=opts.ipolicy_disk_templates,
group_ipolicy=True)
(group_name,) = args
"""
allmods = [opts.ndparams, opts.alloc_policy, opts.diskparams, opts.hv_state,
- opts.disk_state, opts.ispecs_mem_size, opts.ispecs_cpu_count,
- opts.ispecs_disk_count, opts.ispecs_disk_size,
- opts.ispecs_nic_count, opts.ipolicy_vcpu_ratio,
- opts.ipolicy_spindle_ratio, opts.diskparams]
+ opts.disk_state, opts.ipolicy_bounds_specs,
+ opts.ipolicy_vcpu_ratio, opts.ipolicy_spindle_ratio,
+ opts.diskparams, opts.ipolicy_disk_templates]
if allmods.count(None) == len(allmods):
ToStderr("Please give at least one of the parameters.")
return 1
diskparams = dict(opts.diskparams)
- # set the default values
- to_ipolicy = [
- opts.ispecs_mem_size,
- opts.ispecs_cpu_count,
- opts.ispecs_disk_count,
- opts.ispecs_disk_size,
- opts.ispecs_nic_count,
- ]
- for ispec in to_ipolicy:
- for param in ispec:
- if isinstance(ispec[param], basestring):
- if ispec[param].lower() == "default":
- ispec[param] = constants.VALUE_DEFAULT
# create ipolicy object
ipolicy = CreateIPolicyFromOpts(
- ispecs_mem_size=opts.ispecs_mem_size,
- ispecs_cpu_count=opts.ispecs_cpu_count,
- ispecs_disk_count=opts.ispecs_disk_count,
- ispecs_disk_size=opts.ispecs_disk_size,
- ispecs_nic_count=opts.ispecs_nic_count,
+ minmax_ispecs=opts.ipolicy_bounds_specs,
ipolicy_disk_templates=opts.ipolicy_disk_templates,
ipolicy_vcpu_ratio=opts.ipolicy_vcpu_ratio,
ipolicy_spindle_ratio=opts.ipolicy_spindle_ratio,
])
+def _GetCreateCommand(group):
+ (name, ipolicy) = group
+ buf = StringIO()
+ buf.write("gnt-group add")
+ PrintIPolicyCommand(buf, ipolicy, True)
+ buf.write(" ")
+ buf.write(name)
+ return buf.getvalue()
+
+
+def ShowCreateCommand(opts, args):
+ """Shows the command that can be used to re-create a node group.
+
+ Currently it works only for ipolicy specs.
+
+ """
+ cl = GetClient(query=True)
+ selected_fields = ["name"]
+ if opts.include_defaults:
+ selected_fields += ["ipolicy"]
+ else:
+ selected_fields += ["custom_ipolicy"]
+ result = cl.QueryGroups(names=args, fields=selected_fields,
+ use_locking=False)
+
+ for group in result:
+ ToStdout(_GetCreateCommand(group))
+
+
commands = {
"add": (
AddGroup, ARGS_ONE_GROUP,
[DRY_RUN_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, DISK_PARAMS_OPT,
- HV_STATE_OPT, DISK_STATE_OPT, PRIORITY_OPT,
- SUBMIT_OPT] + INSTANCE_POLICY_OPTS,
+ HV_STATE_OPT, DISK_STATE_OPT, PRIORITY_OPT]
+ + SUBMIT_OPTS + INSTANCE_POLICY_OPTS,
"<group_name>", "Add a new node group to the cluster"),
"assign-nodes": (
AssignNodes, ARGS_ONE_GROUP + ARGS_MANY_NODES,
- [DRY_RUN_OPT, FORCE_OPT, PRIORITY_OPT, SUBMIT_OPT],
+ [DRY_RUN_OPT, FORCE_OPT, PRIORITY_OPT] + SUBMIT_OPTS,
"<group_name> <node>...", "Assign nodes to a group"),
"list": (
ListGroups, ARGS_MANY_GROUPS,
"Lists all available fields for node groups"),
"modify": (
SetGroupParams, ARGS_ONE_GROUP,
- [DRY_RUN_OPT, SUBMIT_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, HV_STATE_OPT,
- DISK_STATE_OPT, DISK_PARAMS_OPT, PRIORITY_OPT] + INSTANCE_POLICY_OPTS,
+ [DRY_RUN_OPT] + SUBMIT_OPTS + [ALLOC_POLICY_OPT, NODE_PARAMS_OPT,
+ HV_STATE_OPT, DISK_STATE_OPT, DISK_PARAMS_OPT, PRIORITY_OPT]
+ + INSTANCE_POLICY_OPTS,
"<group_name>", "Alters the parameters of a node group"),
"remove": (
- RemoveGroup, ARGS_ONE_GROUP, [DRY_RUN_OPT, PRIORITY_OPT, SUBMIT_OPT],
+ RemoveGroup, ARGS_ONE_GROUP, [DRY_RUN_OPT, PRIORITY_OPT] + SUBMIT_OPTS,
"[--dry-run] <group-name>",
"Remove an (empty) node group from the cluster"),
"rename": (
RenameGroup, [ArgGroup(min=2, max=2)],
- [DRY_RUN_OPT, SUBMIT_OPT, PRIORITY_OPT],
+ [DRY_RUN_OPT] + SUBMIT_OPTS + [PRIORITY_OPT],
"[--dry-run] <group-name> <new-name>", "Rename a node group"),
"evacuate": (
EvacuateGroup, [ArgGroup(min=1, max=1)],
- [TO_GROUP_OPT, IALLOCATOR_OPT, EARLY_RELEASE_OPT, SUBMIT_OPT, PRIORITY_OPT],
+ [TO_GROUP_OPT, IALLOCATOR_OPT, EARLY_RELEASE_OPT] + SUBMIT_OPTS,
"[-I <iallocator>] [--to <group>]",
"Evacuate all instances within a group"),
"list-tags": (
"<group_name>", "List the tags of the given group"),
"add-tags": (
AddTags, [ArgGroup(min=1, max=1), ArgUnknown()],
- [TAG_SRC_OPT, PRIORITY_OPT, SUBMIT_OPT],
+ [TAG_SRC_OPT, PRIORITY_OPT] + SUBMIT_OPTS,
"<group_name> tag...", "Add tags to the given group"),
"remove-tags": (
RemoveTags, [ArgGroup(min=1, max=1), ArgUnknown()],
- [TAG_SRC_OPT, PRIORITY_OPT, SUBMIT_OPT],
+ [TAG_SRC_OPT, PRIORITY_OPT] + SUBMIT_OPTS,
"<group_name> tag...", "Remove tags from the given group"),
"info": (
GroupInfo, ARGS_MANY_GROUPS, [], "[<group_name>...]",
"Show group information"),
+ "show-ispecs-cmd": (
+ ShowCreateCommand, ARGS_MANY_GROUPS, [INCLUDEDEFAULTS_OPT],
+ "[--include-defaults] [<group_name>...]",
+ "Show the command line to re-create a group"),
}