summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorTerry Howe <terrylhowe@gmail.com>2014-03-31 14:48:42 -0600
committerTerry Howe <terrylhowe@gmail.com>2014-04-01 09:03:45 -0600
commite72072adc3b62b5ef8e3076169fed19dea9995f7 (patch)
treeb953248f2c9a94085a0e2b9dd9ebe5471d455dc4 /openstackclient
parentee22070473dab8bfa3e89d47f1f5a77918c2b026 (diff)
downloadpython-openstackclient-e72072adc3b62b5ef8e3076169fed19dea9995f7.tar.gz
Fix the project option to user list so it filters
The --project option to the user list command was not implemented * Allow users to be filted by project * Support id or name of project with the find_resource command * Make sure the report does not contain duplicates Change-Id: Ic0e10cccd7749d38a7d4b80bbdc68e61a660084b Closes-Bug: #1177255
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/identity/v2_0/user.py19
-rw-r--r--openstackclient/tests/identity/v2_0/test_user.py12
2 files changed, 26 insertions, 5 deletions
diff --git a/openstackclient/identity/v2_0/user.py b/openstackclient/identity/v2_0/user.py
index 628be4b8..688306ba 100644
--- a/openstackclient/identity/v2_0/user.py
+++ b/openstackclient/identity/v2_0/user.py
@@ -156,6 +156,7 @@ class ListUser(lister.Lister):
def take_action(self, parsed_args):
self.log.debug('take_action(%s)' % parsed_args)
+ identity_client = self.app.client_manager.identity
def _format_project(project):
if not project:
@@ -165,6 +166,14 @@ class ListUser(lister.Lister):
else:
return project
+ project = None
+ if parsed_args.project:
+ project = utils.find_resource(
+ identity_client.tenants,
+ parsed_args.project,
+ )
+ project = project.id
+
if parsed_args.long:
columns = (
'ID',
@@ -183,14 +192,20 @@ class ListUser(lister.Lister):
# Cache the project list
project_cache = {}
try:
- for p in self.app.client_manager.identity.tenants.list():
+ for p in identity_client.tenants.list():
project_cache[p.id] = p
except Exception:
# Just forget it if there's any trouble
pass
else:
columns = column_headers = ('ID', 'Name')
- data = self.app.client_manager.identity.users.list()
+ data = identity_client.users.list(tenant_id=project)
+
+ if parsed_args.project:
+ d = {}
+ for s in data:
+ d[s.id] = s
+ data = d.values()
if parsed_args.long:
# FIXME(dtroyer): Sometimes user objects have 'tenant_id' instead
diff --git a/openstackclient/tests/identity/v2_0/test_user.py b/openstackclient/tests/identity/v2_0/test_user.py
index dfb358ff..e191431c 100644
--- a/openstackclient/tests/identity/v2_0/test_user.py
+++ b/openstackclient/tests/identity/v2_0/test_user.py
@@ -381,6 +381,11 @@ class TestUserList(TestUser):
def setUp(self):
super(TestUserList, self).setUp()
+ self.projects_mock.get.return_value = fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.PROJECT_2),
+ loaded=True,
+ )
self.projects_mock.list.return_value = [
fakes.FakeResource(
None,
@@ -408,7 +413,7 @@ class TestUserList(TestUser):
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- self.users_mock.list.assert_called_with()
+ self.users_mock.list.assert_called_with(tenant_id=None)
collist = ('ID', 'Name')
self.assertEqual(columns, collist)
@@ -426,11 +431,12 @@ class TestUserList(TestUser):
('project', identity_fakes.project_id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ project_id = identity_fakes.PROJECT_2['id']
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- self.users_mock.list.assert_called_with()
+ self.users_mock.list.assert_called_with(tenant_id=project_id)
collist = ('ID', 'Name')
self.assertEqual(columns, collist)
@@ -452,7 +458,7 @@ class TestUserList(TestUser):
# DisplayCommandBase.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- self.users_mock.list.assert_called_with()
+ self.users_mock.list.assert_called_with(tenant_id=None)
collist = ('ID', 'Name', 'Project', 'Email', 'Enabled')
self.assertEqual(columns, collist)