diff --git a/lib/rapi/baserlib.py b/lib/rapi/baserlib.py index 099fab1e2f31d037c0a491416e5741312036dd1e..080fcd8599b149a6530c134da629aada57c5b2c8 100644 --- a/lib/rapi/baserlib.py +++ b/lib/rapi/baserlib.py @@ -89,6 +89,23 @@ def _Tags_GET(kind, name=None): return list(tags) +def MapBulkFields(itemslist, fields): + """Map value to field name in to one dictionary. + + Args: + - itemslist: A list of items values + - instance: A list of items names + + Returns: + A list of mapped dictionaries + """ + items_details = [] + for item in itemslist: + mapped = MapFields(fields, item) + items_details.append(mapped) + return items_details + + class R_Generic(object): """Generic class for resources. diff --git a/lib/rapi/rlib1.py b/lib/rapi/rlib1.py index ad9565c8ccc0ffa0407a044ffa24b9319601234e..e8503d27f0c28658effa9ada0fbf21be52eaada0 100644 --- a/lib/rapi/rlib1.py +++ b/lib/rapi/rlib1.py @@ -36,6 +36,17 @@ from ganeti.rapi import baserlib from ganeti.rapi import httperror +I_FIELDS = ["name", "os", "pnode", "snodes", + "admin_state", "admin_ram", + "disk_template", "ip", "mac", "bridge", + "sda_size", "sdb_size", "vcpus", + "oper_state", "status", "tags"] + +N_FIELDS = ["name","dtotal", "dfree", + "mtotal", "mnode", "mfree", + "pinst_cnt", "sinst_cnt", "tags"] + + class R_version(baserlib.R_Generic): """/version resource. @@ -103,30 +114,6 @@ class R_nodes(baserlib.R_Generic): """ DOC_URI = "/nodes" - - def _GetDetails(self, nodeslist): - """Returns detailed instance data for bulk output. - - Args: - instance: A list of nodes names. - - Returns: - A list of nodes properties - - """ - fields = ["name","dtotal", "dfree", - "mtotal", "mnode", "mfree", - "pinst_cnt", "sinst_cnt", "tags"] - - op = ganeti.opcodes.OpQueryNodes(output_fields=fields, - names=nodeslist) - result = ganeti.cli.SubmitOpCode(op) - - nodes_details = [] - for node in result: - mapped = baserlib.MapFields(fields, node) - nodes_details.append(mapped) - return nodes_details def GET(self): """Returns a list of all nodes. @@ -168,7 +155,10 @@ class R_nodes(baserlib.R_Generic): nodeslist = baserlib.ExtractField(ganeti.cli.SubmitOpCode(op), 0) if 'bulk' in self.queryargs: - return self._GetDetails(nodeslist) + op = ganeti.opcodes.OpQueryNodes(output_fields=N_FIELDS, + names=nodeslist) + result = ganeti.cli.SubmitOpCode(op) + return baserlib.MapBulkFields(result, N_FIELDS) return baserlib.BuildUriList(nodeslist, "/nodes/%s") @@ -184,15 +174,11 @@ class R_nodes_name(baserlib.R_Generic): """ node_name = self.items[0] - fields = ["name","dtotal", "dfree", - "mtotal", "mnode", "mfree", - "pinst_cnt", "sinst_cnt", "tags"] - - op = ganeti.opcodes.OpQueryNodes(output_fields=fields, + op = ganeti.opcodes.OpQueryNodes(output_fields=N_FIELDS, names=[node_name]) result = ganeti.cli.SubmitOpCode(op) - return baserlib.MapFields(fields, result[0]) + return baserlib.MapFields(N_FIELDS, result[0]) class R_nodes_name_tags(baserlib.R_Generic): @@ -218,32 +204,7 @@ class R_instances(baserlib.R_Generic): """ DOC_URI = "/instances" - def _GetDetails(self, instanceslist): - """Returns detailed instance data for bulk output. - - Args: - instance: A list of instances names. - - Returns: - A list with instances properties. - - """ - fields = ["name", "os", "pnode", "snodes", - "admin_state", "admin_ram", - "disk_template", "ip", "mac", "bridge", - "sda_size", "sdb_size", "vcpus", - "oper_state", "status", "tags"] - - op = ganeti.opcodes.OpQueryInstances(output_fields=fields, - names=instanceslist) - result = ganeti.cli.SubmitOpCode(op) - instances_details = [] - for instance in result: - mapped = baserlib.MapFields(fields, instance) - instances_details.append(mapped) - return instances_details - def GET(self): """Returns a list of all available instances. @@ -291,7 +252,11 @@ class R_instances(baserlib.R_Generic): instanceslist = baserlib.ExtractField(ganeti.cli.SubmitOpCode(op), 0) if 'bulk' in self.queryargs: - return self._GetDetails(instanceslist) + op = ganeti.opcodes.OpQueryInstances(output_fields=I_FIELDS, + names=instanceslist) + result = ganeti.cli.SubmitOpCode(op) + return baserlib.MapBulkFields(result, I_FIELDS) + else: return baserlib.BuildUriList(instanceslist, "/instances/%s") @@ -308,17 +273,11 @@ class R_instances_name(baserlib.R_Generic): """ instance_name = self.items[0] - fields = ["name", "os", "pnode", "snodes", - "admin_state", "admin_ram", - "disk_template", "ip", "mac", "bridge", - "sda_size", "sdb_size", "vcpus", - "oper_state", "status", "tags"] - - op = ganeti.opcodes.OpQueryInstances(output_fields=fields, + op = ganeti.opcodes.OpQueryInstances(output_fields=I_FIELDS, names=[instance_name]) result = ganeti.cli.SubmitOpCode(op) - return baserlib.MapFields(fields, result[0]) + return baserlib.MapFields(I_FIELDS, result[0]) class R_instances_name_tags(baserlib.R_Generic): diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 956d2bfb3ecf205b4b2d5ebb333dd2e6f80f549f..3ca5e8a82ae20669aa682cdefbb7228e1bf98cf0 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -32,6 +32,8 @@ from ganeti import luxi from ganeti.rapi import baserlib +from ganeti.rapi.rlib1 import I_FIELDS, N_FIELDS + class R_2_jobs(baserlib.R_Generic): """/2/jobs resource. @@ -85,30 +87,6 @@ class R_2_nodes(baserlib.R_Generic): """ DOC_URI = "/2/nodes" - def _GetDetails(self, nodeslist): - """Returns detailed instance data for bulk output. - - Args: - instance: A list of nodes names. - - Returns: - A list of nodes properties - - """ - fields = ["name","dtotal", "dfree", - "mtotal", "mnode", "mfree", - "pinst_cnt", "sinst_cnt", "tags"] - - op = ganeti.opcodes.OpQueryNodes(output_fields=fields, - names=nodeslist) - result = ganeti.cli.SubmitOpCode(op) - - nodes_details = [] - for node in result: - mapped = baserlib.MapFields(fields, node) - nodes_details.append(mapped) - return nodes_details - def GET(self): """Returns a list of all nodes. @@ -149,6 +127,9 @@ class R_2_nodes(baserlib.R_Generic): nodeslist = baserlib.ExtractField(ganeti.cli.SubmitOpCode(op), 0) if 'bulk' in self.queryargs: - return self._GetDetails(nodeslist) + op = ganeti.opcodes.OpQueryNodes(output_fields=N_FIELDS, + names=nodeslist) + result = ganeti.cli.SubmitOpCode(op) + return baserlib.MapBulkFields(result, N_FIELDS) return baserlib.BuildUriList(nodeslist, "/nodes/%s", uri_fields=("id", "uri"))