diff --git a/muranoclient/osc/v1/environment.py b/muranoclient/osc/v1/environment.py index 10d9c685..cda44be5 100644 --- a/muranoclient/osc/v1/environment.py +++ b/muranoclient/osc/v1/environment.py @@ -41,13 +41,20 @@ class ListEnvironments(command.Lister): default=False, help='List environments from all tenants (admin only).', ) + parser.add_argument( + '--tenant', + metavar='', + default=None, + help='Allows to list environments for a given tenant (admin only).' + ) return parser def take_action(self, parsed_args): LOG.debug("take_action({0})".format(parsed_args)) client = self.app.client_manager.application_catalog - data = client.environments.list(parsed_args.all_tenants) + data = client.environments.list( + parsed_args.all_tenants, parsed_args.tenant) columns = ('id', 'name', 'status', 'created', 'updated') column_headers = [c.capitalize() for c in columns] diff --git a/muranoclient/tests/unit/osc/v1/test_environment.py b/muranoclient/tests/unit/osc/v1/test_environment.py index c212e08d..f48a9096 100644 --- a/muranoclient/tests/unit/osc/v1/test_environment.py +++ b/muranoclient/tests/unit/osc/v1/test_environment.py @@ -97,9 +97,9 @@ class TestListEnvironment(TestEnvironment): self.assertEqual(expected_data, data) @mock.patch('osc_lib.utils.get_item_properties') - def test_environment_list_with_options(self, mock_util): + def test_environment_list_with_all_tenants(self, mock_util): arglist = ['--all-tenants'] - verifylist = [('all_tenants', True)] + verifylist = [('all_tenants', True), ('tenant', None)] mock_util.return_value = ('1234', 'Environment of all tenants', 'fake deployed', '2015-12-16T17:31:54', @@ -119,6 +119,32 @@ class TestListEnvironment(TestEnvironment): 'fake deployed', '2015-12-16T17:31:54', '2015-12-16T17:31:54')] self.assertEqual(expected_data, data) + self.environment_mock.list.assert_called_once_with(True, None) + + @mock.patch('osc_lib.utils.get_item_properties') + def test_environment_list_with_tenant(self, mock_util): + arglist = ['--tenant=ABC'] + verifylist = [('all_tenants', False), ('tenant', 'ABC')] + + mock_util.return_value = ('1234', 'Environment of tenant ABC', + 'fake deployed', '2015-12-16T17:31:54', + '2015-12-16T17:31:54' + ) + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + # Check that columns are correct + expected_columns = ['Id', 'Name', 'Status', 'Created', 'Updated'] + self.assertEqual(expected_columns, columns) + + # Check that data is correct + expected_data = [('1234', 'Environment of tenant ABC', + 'fake deployed', '2015-12-16T17:31:54', + '2015-12-16T17:31:54')] + self.assertEqual(expected_data, data) + self.environment_mock.list.assert_called_once_with(False, 'ABC') class TestShowEnvironment(TestEnvironment): diff --git a/muranoclient/tests/unit/test_shell.py b/muranoclient/tests/unit/test_shell.py index e0a4375a..d4b884e6 100644 --- a/muranoclient/tests/unit/test_shell.py +++ b/muranoclient/tests/unit/test_shell.py @@ -408,11 +408,15 @@ class ShellCommandTest(ShellTest): self.register_keystone_token_fixture(m_requests) self.shell('environment-list') - self.client.environments.list.assert_called_once_with(False) + self.client.environments.list.assert_called_once_with(False, None) self.client.environments.list.reset_mock() self.shell('environment-list --all-tenants') - self.client.environments.list.assert_called_once_with(True) + self.client.environments.list.assert_called_once_with(True, None) + + self.client.environments.list.reset_mock() + self.shell('environment-list --tenant ABC') + self.client.environments.list.assert_called_once_with(False, 'ABC') @mock.patch('muranoclient.v1.environments.EnvironmentManager') @requests_mock.mock() diff --git a/muranoclient/v1/environments.py b/muranoclient/v1/environments.py index 888043e9..ab76381b 100644 --- a/muranoclient/v1/environments.py +++ b/muranoclient/v1/environments.py @@ -36,9 +36,12 @@ class Status(base.Resource): class EnvironmentManager(base.ManagerWithFind): resource_class = Environment - def list(self, all_tenants=False): + def list(self, all_tenants=False, tenant_id=None): + params = {'all_tenants': all_tenants} + if tenant_id: + params['tenant'] = tenant_id path = '/v1/environments?{query}'.format( - query=urllib.parse.urlencode({'all_tenants': all_tenants})) + query=urllib.parse.urlencode(params)) return self._list(path, 'environments') def create(self, data): diff --git a/muranoclient/v1/shell.py b/muranoclient/v1/shell.py index 9c85ebeb..412c72d9 100644 --- a/muranoclient/v1/shell.py +++ b/muranoclient/v1/shell.py @@ -41,12 +41,16 @@ _bool_from_str_strict = functools.partial( @utils.arg('--all-tenants', action='store_true', default=False, help='Allows to list environments from all tenants' ' (admin only).') +@utils.arg('--tenant', metavar="", default=None, + help='Allows to list environments for a given tenant' + ' (admin only).') def do_environment_list(mc, args=None): """List the environments.""" if args is None: args = {} all_tenants = getattr(args, 'all_tenants', False) - environments = mc.environments.list(all_tenants) + tenant = getattr(args, 'tenant', None) + environments = mc.environments.list(all_tenants, tenant) _print_environment_list(environments) diff --git a/releasenotes/notes/list-environments-of-a-given-project-e407dd5271649ad2.yaml b/releasenotes/notes/list-environments-of-a-given-project-e407dd5271649ad2.yaml new file mode 100644 index 00000000..193d11e1 --- /dev/null +++ b/releasenotes/notes/list-environments-of-a-given-project-e407dd5271649ad2.yaml @@ -0,0 +1,4 @@ +--- +features: + - The client now is able to consume the updated `List Environments` API call, + which may be used to filter environments by an owner project (tenant).