From 10889e0cba15a63ad508c3f79c41a5fd6bc1f417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Nussbaumer?= <rn@google.com> Date: Wed, 14 Dec 2011 14:39:49 +0100 Subject: [PATCH] gnt-instance: Adding instance policy to add MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RenΓ© Nussbaumer <rn@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- lib/cli.py | 3 ++- lib/client/gnt_instance.py | 1 + lib/cmdlib.py | 19 ++++++++++++++++++- lib/opcodes.py | 1 + man/gnt-instance.rst | 4 ++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/cli.py b/lib/cli.py index 00cb0da68..ebf91c819 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -2309,7 +2309,8 @@ def GenericInstanceCreate(mode, opts, args): src_path=src_path, tags=tags, no_install=no_install, - identify_defaults=identify_defaults) + identify_defaults=identify_defaults, + ignore_ipolicy=opts.ignore_ipolicy) SubmitOrSend(op, opts) return 0 diff --git a/lib/client/gnt_instance.py b/lib/client/gnt_instance.py index f6fb783fa..6fc1a0280 100644 --- a/lib/client/gnt_instance.py +++ b/lib/client/gnt_instance.py @@ -1422,6 +1422,7 @@ add_opts = [ OS_OPT, FORCE_VARIANT_OPT, NO_INSTALL_OPT, + IGNORE_IPOLICY_OPT, ] commands = { diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 64c3a4f93..38fb083c5 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -9394,7 +9394,7 @@ class LUInstanceCreate(LogicalUnit): # pylint: disable=W0142 self.instance_file_storage_dir = utils.PathJoin(*joinargs) - def CheckPrereq(self): + def CheckPrereq(self): # pylint: disable=R0914 """Check prerequisites. """ @@ -9631,6 +9631,23 @@ class LUInstanceCreate(LogicalUnit): nodenames = [pnode.name] + self.secondaries + # Verify instance specs + ispec = { + constants.ISPEC_MEM_SIZE: self.be_full.get(constants.BE_MAXMEM, None), + constants.ISPEC_CPU_COUNT: self.be_full.get(constants.BE_VCPUS, None), + constants.ISPEC_DISK_COUNT: len(self.disks), + constants.ISPEC_DISK_SIZE: [disk.size for disk in self.disks], + constants.ISPEC_NIC_COUNT: len(self.nics), + } + + ipolicy = _CalculateGroupIPolicy(cluster, pnode.group) + res = _ComputeIPolicyInstanceSpecViolation(ipolicy, ispec) + if not self.op.ignore_ipolicy and res: + raise errors.OpPrereqError(("Instance allocation to group %s violates" + " policy: %s") % (pnode.group, + utils.CommaJoin(res)), + errors.ECODE_INVAL) + # disk parameters (not customizable at instance or node level) # just use the primary node parameters, ignoring the secondary. self.diskparams = self.cfg.GetNodeGroup(pnode.group).diskparams diff --git a/lib/opcodes.py b/lib/opcodes.py index 5c6b01564..3f6a845cc 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -1086,6 +1086,7 @@ class OpInstanceCreate(OpCode): _PForceVariant, _PWaitForSync, _PNameCheck, + _PIgnoreIpolicy, ("beparams", ht.EmptyDict, ht.TDict, "Backend parameters for instance"), ("disks", ht.NoDefault, # TODO: Generate check from constants.IDISK_PARAMS_TYPES diff --git a/man/gnt-instance.rst b/man/gnt-instance.rst index 61ddd99d0..238cbd7ee 100644 --- a/man/gnt-instance.rst +++ b/man/gnt-instance.rst @@ -39,6 +39,7 @@ ADD | {{-n|--node} *node[:secondary-node]* \| {-I|--iallocator} *name*} | {{-o|--os-type} *os-type*} | [--submit] +| [--ignore-ipolicy] | {*instance*} Creates a new instance on the specified host. The *instance* argument @@ -629,6 +630,9 @@ The ``--submit`` option is used to send the job to the master daemon but not wait for its completion. The job ID will be shown so that it can be examined via **gnt-job info**. +If ``--ignore-ipolicy`` is given any instance policy violations occuring +during this operation are ignored. + Example:: # gnt-instance add -t file --disk 0:size=30g -B maxmem=512 -o debian-etch \ -- GitLab