Adding new group now allows to take instance policy specs as arguments. Again, sanity checks are preformed.
Signed-off-by: Agata Murawska <[email protected]> --- lib/client/gnt_group.py | 19 ++++++++++++++++--- lib/cmdlib.py | 7 ++++++- lib/opcodes.py | 1 + 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/client/gnt_group.py b/lib/client/gnt_group.py index 9054b75..3770a00 100644 --- a/lib/client/gnt_group.py +++ b/lib/client/gnt_group.py @@ -26,6 +26,7 @@ from ganeti.cli import * from ganeti import constants +from ganeti import objects from ganeti import opcodes from ganeti import utils @@ -47,11 +48,21 @@ def AddGroup(opts, args): @return: the desired exit code """ + ipolicy = objects.CreateIPolicyFromOpts( + mem_count_ispecs=opts.mem_count_ispecs, + cpu_count_ispecs=opts.cpu_count_ispecs, + disk_count_ispecs=opts.disk_count_ispecs, + disk_size_ispecs=opts.disk_size_ispecs, + nic_count_ispecs=opts.nic_count_ispecs, + group_ipolicy=True) + for key in ipolicy.keys(): + utils.ForceDictType(ipolicy[key], constants.ISPECS_PARAMETER_TYPES) + (group_name,) = args diskparams = dict(opts.diskparams) op = opcodes.OpGroupAdd(group_name=group_name, ndparams=opts.ndparams, alloc_policy=opts.alloc_policy, - diskparams=diskparams) + diskparams=diskparams, ipolicy=ipolicy) SubmitOpCode(op, opts=opts) @@ -219,8 +230,10 @@ def EvacuateGroup(opts, args): commands = { "add": ( - AddGroup, ARGS_ONE_GROUP, - [DRY_RUN_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, DISK_PARAMS_OPT], + AddGroup, ARGS_ONE_GROUP, [DRY_RUN_OPT, ALLOC_POLICY_OPT, DISK_PARAMS_OPT, + MEM_COUNT_SPECS_OPT, CPU_COUNT_SPECS_OPT, + DISK_COUNT_SPECS_OPT, DISK_SIZE_SPECS_OPT, + NIC_COUNT_SPECS_OPT, NODE_PARAMS_OPT], "<group_name>", "Add a new node group to the cluster"), "assign-nodes": ( AssignNodes, ARGS_ONE_GROUP + ARGS_MANY_NODES, [DRY_RUN_OPT, FORCE_OPT], diff --git a/lib/cmdlib.py b/lib/cmdlib.py index a14cff9..eaa48c6 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -12668,6 +12668,10 @@ class LUGroupAdd(LogicalUnit): else: self.op.diskparams = self.cfg.GetClusterInfo().diskparams + cluster = self.cfg.GetClusterInfo() + full_ipolicy = cluster.SimpleFillIpolicy(self.op.ipolicy) + objects.InstancePolicy.CheckParameterSyntax(full_ipolicy) + def BuildHooksEnv(self): """Build hooks env. @@ -12691,7 +12695,8 @@ class LUGroupAdd(LogicalUnit): uuid=self.group_uuid, alloc_policy=self.op.alloc_policy, ndparams=self.op.ndparams, - diskparams=self.op.diskparams) + diskparams=self.op.diskparams, + ipolicy=self.op.ipolicy) self.cfg.AddNodeGroup(group_obj, self.proc.GetECId(), check_uuid=False) del self.remove_locks[locking.LEVEL_NODEGROUP] diff --git a/lib/opcodes.py b/lib/opcodes.py index bfdb902..d774eca 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -1404,6 +1404,7 @@ class OpGroupAdd(OpCode): _PNodeGroupAllocPolicy, _PGroupNodeParams, _PDiskParams, + ("ipolicy", None, ht.TMaybeDict, "Group-wide instance policy specs"), ] -- 1.7.3.1
