import ganeti.opcodes
from ganeti import luxi
+from ganeti import rapi
def BuildUriList(ids, uri_format, uri_fields=("name", "uri")):
"""Builds a URI list as used by index resources.
- Args:
- - ids: List of ids as strings
- - uri_format: Format to be applied for URI
- - uri_fields: Optional parameter for field ids
+ @param ids: list of ids as strings
+ @param uri_format: format to be applied for URI
+ @param uri_fields: optional parameter for field IDs
"""
(field_id, field_uri) = uri_fields
def ExtractField(sequence, index):
"""Creates a list containing one column out of a list of lists.
- Args:
- - sequence: Sequence of lists
- - index: Index of field
+ @param sequence: sequence of lists
+ @param index: index of field
"""
return map(lambda item: item[index], sequence)
def MapFields(names, data):
"""Maps two lists into one dictionary.
- Args:
- - names: Field names (list of strings)
- - data: Field data (list)
+ Example::
+ >>> MapFields(["a", "b"], ["foo", 123])
+ {'a': 'foo', 'b': 123}
- Example:
- >>> MapFields(["a", "b"], ["foo", 123])
- {'a': 'foo', 'b': 123}
+ @param names: field names (list of strings)
+ @param data: field data (list)
"""
if len(names) != len(data):
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=None):
+def _Tags_PUT(kind, tags, name=""):
"""Helper function to set tags.
"""
- if name is None:
- # Do not cause "missing parameter" error, which happens if a parameter
- # is None.
- name = ""
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
+ @param itemslist: a list of items values
+ @param fields: a list of items names
+
+ @return: a list of mapped dictionaries
- Returns:
- A list of mapped dictionaries
"""
items_details = []
for item in itemslist:
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.
"""
- def __init__(self, request, items, queryargs, post_data):
+ # Default permission requirements
+ GET_ACCESS = []
+ PUT_ACCESS = [rapi.RAPI_ACCESS_WRITE]
+ POST_ACCESS = [rapi.RAPI_ACCESS_WRITE]
+ DELETE_ACCESS = [rapi.RAPI_ACCESS_WRITE]
+
+ def __init__(self, items, queryargs, req):
"""Generic resource constructor.
- Args:
- request: HTTPRequestHandler object
- items: a list with variables encoded in the URL
- queryargs: a dictionary with additional options from URL
+ @param items: a list with variables encoded in the URL
+ @param queryargs: a dictionary with additional options from URL
"""
- self.request = request
self.items = items
self.queryargs = queryargs
- self.post_data = post_data
+ self.req = req
+ self.sn = None
+
+ def getSerialNumber(self):
+ """Get Serial Number.
+
+ """
+ return self.sn