diff --git a/lib/rapi/connector.py b/lib/rapi/connector.py index 0b81c57d79a2828bcc258faf93b6263b99b6a2ba..cb843b8944ee71aa4943d6511e93620f9a35514e 100644 --- a/lib/rapi/connector.py +++ b/lib/rapi/connector.py @@ -114,12 +114,47 @@ class R_root(baserlib.R_Generic): return baserlib.BuildUriList(rootlist, "/%s") +def _getResources(id): + """Return a list of resources underneath given id. + + This is to generalize querying of version resources lists. + + @return: a list of resources names. + + """ + r_pattern = re.compile('^R_%s_([a-zA-Z0-9]+)$' % id) + + rlist = [] + for handler in CONNECTOR.values(): + m = r_pattern.match(handler.__name__) + if m: + name = m.group(1) + rlist.append(name) + + return rlist + + +class R_2(baserlib.R_Generic): + """ /2 resourse. + + """ + DOC_URI = "/2" + + def GET(self): + """Show the list of mapped resources. + + @return: a dictionary with 'name' and 'uri' keys for each of them. + + """ + return baserlib.BuildUriList(_getResources("2"), "/2/%s") + + CONNECTOR.update({ "/": R_root, "/version": rlib1.R_version, - + "/2": R_2, "/2/jobs": rlib2.R_2_jobs, "/2/nodes": rlib2.R_2_nodes, "/2/instances": rlib2.R_2_instances, diff --git a/test/ganeti.rapi.resources_unittest.py b/test/ganeti.rapi.resources_unittest.py index 9a5bef6d978afb8871a8656336f5831d9c6644ad..b40e0da492623eec3cb121d35fc59d48b075636e 100755 --- a/test/ganeti.rapi.resources_unittest.py +++ b/test/ganeti.rapi.resources_unittest.py @@ -76,7 +76,7 @@ class R_RootTests(unittest.TestCase): def testGet(self): expected = [ - # TODO: {'name': 'info', 'uri': '/2'}, + {'name': '2', 'uri': '/2'}, {'name': 'version', 'uri': '/version'}, ] self.assertEquals(self.root.GET(), expected)