From d50b305985a8761e22ff951989dfc2bd53d8e5bd Mon Sep 17 00:00:00 2001 From: Oleksiy Mishchenko <oleksiy@google.com> Date: Wed, 19 Nov 2008 11:09:26 +0000 Subject: [PATCH] RAPI: Instance modify. Split parameters filter to the separate function and reuse it in instance creation. --- lib/rapi/baserlib.py | 27 +++++++++++++++++++++++++++ lib/rapi/rlib1.py | 26 ++++++++++++++++++++++++++ lib/rapi/rlib2.py | 16 +++------------- 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/lib/rapi/baserlib.py b/lib/rapi/baserlib.py index e6ed7d099..00b9318df 100644 --- a/lib/rapi/baserlib.py +++ b/lib/rapi/baserlib.py @@ -122,6 +122,33 @@ def MapBulkFields(itemslist, fields): return items_details +def MakeParamsDict(opts, params): + """ Makes params dictionary out of a option set. + + This function returns a dictionary needed for hv or be parameters. But only + those fields which provided in the option set. Takes parameters frozensets + from constants. + + @type opts: dict + @param opts: selected options + @type params: frozenset + @param params: subset of options + @rtype: dict + @return: dictionary of options, filtered by given subset. + + """ + result = {} + + for p in params: + try: + value = opts[p] + except KeyError: + continue + result[p] = value + + return result + + class R_Generic(object): """Generic class for resources. diff --git a/lib/rapi/rlib1.py b/lib/rapi/rlib1.py index 618b3030f..007a5128e 100644 --- a/lib/rapi/rlib1.py +++ b/lib/rapi/rlib1.py @@ -285,6 +285,32 @@ class R_instances_name(baserlib.R_Generic): return job_id + def POST(self): + """Modify an instance. + + """ + instance_name = self.items[0] + opts = {} + + for key in self.queryargs: + opts[key] = self.queryargs[key][0] + + beparams = baserlib.MakeParamsDict(opts, constants.BES_PARAMETERS) + hvparams = baserlib.MakeParamsDict(opts, constants.HVS_PARAMETERS) + + op = ganeti.opcodes.OpSetInstanceParams( + instance_name=instance_name, + ip=opts.get('ip', None), + bridge=opts.get('bridge', None), + mac=opts.get('mac', None), + hvparams=hvparams, + beparams=beparams, + force=opts.get('force', None)) + + job_id = ganeti.cli.SendJob([op]) + + return job_id + class R_instances_name_tags(baserlib.R_Generic): """/instances/[instance_name]/tags resource. diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 1484c2b14..66d837cd7 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -205,18 +205,8 @@ class R_2_instances(baserlib.R_Generic): """ opts = self.req.request_post_data - # beparams - mem = opts.get('mem', None) - vcpus = opts.get('vcpus', None) - auto_balance = opts.get('auto_balance', None) - - beparams = {} - - for key, const in [(mem, constants.BE_MEMORY), - (vcpus, constants.BE_VCPUS), - (auto_balance, constants.BE_AUTO_BALANCE)]: - if key is not None: - beparams[const] = key + beparams = baserlib.MakeParamsDict(opts, constants.BES_PARAMETERS) + hvparams = baserlib.MakeParamsDict(opts, constants.HVS_PARAMETERS) op = ganeti.opcodes.OpCreateInstance( instance_name=opts.get('name'), @@ -234,7 +224,7 @@ class R_2_instances(baserlib.R_Generic): wait_for_sync=opts.get('wait_for_sync', True), mac=opts.get('mac', 'auto'), hypervisor=opts.get('hypervisor', None), - hvparams=opts.get('hvparams', {}), + hvparams=hvparams, beparams=beparams, iallocator=opts.get('iallocator', None), file_storage_dir=opts.get('file_storage_dir', None), -- GitLab