import ganeti.cli
import ganeti.opcodes
+from ganeti import luxi
+
def BuildUriList(ids, uri_format, uri_fields=("name", "uri")):
"""Builds a URI list as used by index resources.
"""
(field_id, field_uri) = uri_fields
-
+
def _MapId(m_id):
return { field_id: m_id, field_uri: uri_format % m_id, }
"""
if len(names) != len(data):
raise AttributeError("Names and data must have the same length")
- return dict([(names[i], data[i]) for i in range(len(names))])
+ return dict(zip(names, data))
-def _Tags_GET(kind, name=None):
+def _Tags_GET(kind, name=""):
"""Helper function to retrieve tags.
"""
- if name is None:
- # Do not cause "missing parameter" error, which happens if a parameter
- # is None.
- name = ""
op = ganeti.opcodes.OpGetTags(kind=kind, name=name)
tags = ganeti.cli.SubmitOpCode(op)
return list(tags)
+def _Tags_POST(kind, tags, name=""):
+ """Helper function to set tags.
+
+ """
+ cl = luxi.Client()
+ return cl.SubmitJob([ganeti.opcodes.OpAddTags(kind=kind, name=name,
+ tags=tags)])
+
+
+def _Tags_DELETE(kind, tags, name=""):
+ """Helper function to delete tags.
+
+ """
+ cl = luxi.Client()
+ return cl.SubmitJob([ganeti.opcodes.OpDelTags(kind=kind, name=name,
+ tags=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.
"""
- def __init__(self, request, items, queryargs):
+ def __init__(self, request, items, queryargs, post_data):
"""Generic resource constructor.
Args:
self.request = request
self.items = items
self.queryargs = queryargs
+ self.post_data = post_data