network: Add tenant project filter for RBAC list
Implements a new parser argument "--target-project" to list RBAC policies for a specific tenant project only. This uses the already existing server-side query parameter "target_tenant". Story: 2009937 Task: 44824 Depends-On: https://review.opendev.org/c/openstack/openstacksdk/+/834442 Change-Id: I83ff07041a022e8795e3c5550c6a7aabb0c0d8c8 Signed-off-by: Jan Hartkopf <jhartkopf@inovex.de>
This commit is contained in:
		@@ -217,6 +217,11 @@ class ListNetworkRBAC(command.Lister):
 | 
			
		||||
            help=_('List network RBAC policies according to given '
 | 
			
		||||
                   'action ("access_as_external" or "access_as_shared")')
 | 
			
		||||
        )
 | 
			
		||||
        parser.add_argument(
 | 
			
		||||
            '--target-project',
 | 
			
		||||
            metavar='<target-project>',
 | 
			
		||||
            help=_('List network RBAC policies for a specific target project')
 | 
			
		||||
        )
 | 
			
		||||
        parser.add_argument(
 | 
			
		||||
            '--long',
 | 
			
		||||
            action='store_true',
 | 
			
		||||
@@ -247,6 +252,16 @@ class ListNetworkRBAC(command.Lister):
 | 
			
		||||
            query['object_type'] = parsed_args.type
 | 
			
		||||
        if parsed_args.action is not None:
 | 
			
		||||
            query['action'] = parsed_args.action
 | 
			
		||||
        if parsed_args.target_project is not None:
 | 
			
		||||
            project_id = "*"
 | 
			
		||||
 | 
			
		||||
            if parsed_args.target_project != "*":
 | 
			
		||||
                identity_client = self.app.client_manager.identity
 | 
			
		||||
                project_id = identity_common.find_project(
 | 
			
		||||
                    identity_client,
 | 
			
		||||
                    parsed_args.target_project,
 | 
			
		||||
                ).id
 | 
			
		||||
            query['target_project_id'] = project_id
 | 
			
		||||
 | 
			
		||||
        data = client.rbac_policies(**query)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -405,6 +405,9 @@ class TestListNetworkRABC(TestNetworkRBAC):
 | 
			
		||||
 | 
			
		||||
        self.network.rbac_policies = mock.Mock(return_value=self.rbac_policies)
 | 
			
		||||
 | 
			
		||||
        self.project = identity_fakes_v3.FakeProject.create_one_project()
 | 
			
		||||
        self.projects_mock.get.return_value = self.project
 | 
			
		||||
 | 
			
		||||
    def test_network_rbac_list(self):
 | 
			
		||||
        arglist = []
 | 
			
		||||
        verifylist = []
 | 
			
		||||
@@ -466,6 +469,22 @@ class TestListNetworkRABC(TestNetworkRBAC):
 | 
			
		||||
        self.assertEqual(self.columns_long, columns)
 | 
			
		||||
        self.assertEqual(self.data_long, list(data))
 | 
			
		||||
 | 
			
		||||
    def test_network_rbac_list_target_project_opt(self):
 | 
			
		||||
        arglist = [
 | 
			
		||||
            '--target-project', self.rbac_policies[0].target_project_id, ]
 | 
			
		||||
        verifylist = [
 | 
			
		||||
            ('target_project', self.rbac_policies[0].target_project_id)]
 | 
			
		||||
        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 | 
			
		||||
 | 
			
		||||
        # DisplayCommandBase.take_action() returns two tuples
 | 
			
		||||
        columns, data = self.cmd.take_action(parsed_args)
 | 
			
		||||
 | 
			
		||||
        self.network.rbac_policies.assert_called_with(**{
 | 
			
		||||
            'target_project_id': self.project.id
 | 
			
		||||
        })
 | 
			
		||||
        self.assertEqual(self.columns, columns)
 | 
			
		||||
        self.assertEqual(self.data, list(data))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestSetNetworkRBAC(TestNetworkRBAC):
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
---
 | 
			
		||||
features:
 | 
			
		||||
  - |
 | 
			
		||||
    Add a new argument ``--target-project`` to the ``network rbac list``
 | 
			
		||||
    command to filter for a specific target project.
 | 
			
		||||
		Reference in New Issue
	
	Block a user