From 1f5d9bf8747301b4f6b54e665500061c78dbd808 Mon Sep 17 00:00:00 2001 From: Agata Murawska <agatamurawska@google.com> Date: Tue, 6 Dec 2011 16:24:29 +0100 Subject: [PATCH] AddGroup supports instance policy Signed-off-by: Agata Murawska <agatamurawska@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- lib/client/gnt_group.py | 23 +++++++++++++++++++++-- lib/cmdlib.py | 7 ++++++- lib/opcodes.py | 1 + 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/client/gnt_group.py b/lib/client/gnt_group.py index c38192f21..178fda583 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(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, + 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) @@ -225,11 +236,19 @@ def EvacuateGroup(opts, args): return rcode +INSTANCE_POLICY_OPTS = [ + SPECS_CPU_COUNT_OPT, + SPECS_DISK_COUNT_OPT, + SPECS_DISK_SIZE_OPT, + SPECS_MEM_SIZE_OPT, + SPECS_NIC_COUNT_OPT, + ] commands = { "add": ( AddGroup, ARGS_ONE_GROUP, - [DRY_RUN_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, DISK_PARAMS_OPT], + [DRY_RUN_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, DISK_PARAMS_OPT] + + 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], diff --git a/lib/cmdlib.py b/lib/cmdlib.py index eb87aef2c..1041b1501 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -12788,6 +12788,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. @@ -12811,7 +12815,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 dddad97a4..4cdcdd9fc 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -1412,6 +1412,7 @@ class OpGroupAdd(OpCode): _PNodeGroupAllocPolicy, _PGroupNodeParams, _PDiskParams, + ("ipolicy", None, ht.TMaybeDict, "Group-wide instance policy specs"), ] -- GitLab