summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2010-07-28 22:49:11 +0000
committerTarmac <>2010-07-28 22:49:11 +0000
commitc0e3fd6d728abe012f10a55c4f2bf2c895a6c724 (patch)
tree3bfd32c69f2e272470396153e7528af152ccf81c
parentd32e41bc6237f1413e663144ab72d4a89627b71a (diff)
parent2ecdf8cdd81df36ef34fc7522aae3f5f1b217d81 (diff)
downloadnova-c0e3fd6d728abe012f10a55c4f2bf2c895a6c724.tar.gz
nova-c0e3fd6d728abe012f10a55c4f2bf2c895a6c724.tar.xz
nova-c0e3fd6d728abe012f10a55c4f2bf2c895a6c724.zip
Adds optional user param to the get projects command.
-rw-r--r--nova/auth/ldapdriver.py7
-rw-r--r--nova/auth/manager.py6
-rw-r--r--nova/tests/auth_unittest.py6
3 files changed, 14 insertions, 5 deletions
diff --git a/nova/auth/ldapdriver.py b/nova/auth/ldapdriver.py
index 1591c88e9..055e8332b 100644
--- a/nova/auth/ldapdriver.py
+++ b/nova/auth/ldapdriver.py
@@ -120,10 +120,13 @@ class LdapDriver(object):
'(objectclass=novaKeyPair)')
return [self.__to_key_pair(uid, attr) for attr in attrs]
- def get_projects(self):
+ def get_projects(self, uid=None):
"""Retrieve list of projects"""
+ filter = '(objectclass=novaProject)'
+ if uid:
+ filter = "(&%s(member=%s))" % (filter, self.__uid_to_dn(uid))
attrs = self.__find_objects(FLAGS.ldap_project_subtree,
- '(objectclass=novaProject)')
+ filter)
return [self.__to_project(attr) for attr in attrs]
def create_user(self, name, access_key, secret_key, is_admin):
diff --git a/nova/auth/manager.py b/nova/auth/manager.py
index 66027f6c2..7307f673b 100644
--- a/nova/auth/manager.py
+++ b/nova/auth/manager.py
@@ -547,10 +547,10 @@ class AuthManager(object):
if project_dict:
return Project(**project_dict)
- def get_projects(self):
- """Retrieves list of all projects"""
+ def get_projects(self, user=None):
+ """Retrieves list of projects, optionally filtered by user"""
with self.driver() as drv:
- project_list = drv.get_projects()
+ project_list = drv.get_projects(User.safe_id(user))
if not project_list:
return []
return [Project(**project_dict) for project_dict in project_list]
diff --git a/nova/tests/auth_unittest.py b/nova/tests/auth_unittest.py
index 0cd377b70..6f35bab4e 100644
--- a/nova/tests/auth_unittest.py
+++ b/nova/tests/auth_unittest.py
@@ -193,9 +193,15 @@ class AuthTestCase(test.BaseTestCase):
for vpn in vpns:
vpn.destroy()
+ def test_214_can_retrieve_project_by_user(self):
+ project = self.manager.create_project('testproj2', 'test2', 'Another test project', ['test2'])
+ self.assert_(len(self.manager.get_projects()) > 1)
+ self.assertEqual(len(self.manager.get_projects('test2')), 1)
+
def test_299_can_delete_project(self):
self.manager.delete_project('testproj')
self.assertFalse(filter(lambda p: p.name == 'testproj', self.manager.get_projects()))
+ self.manager.delete_project('testproj2')
def test_999_can_delete_users(self):
self.manager.delete_user('test1')