summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-08-03 12:54:03 +0000
committerGerrit Code Review <review@openstack.org>2016-08-03 12:54:03 +0000
commita42664ccaa9860c34fcd91cb4c3dbdf6805b3eb0 (patch)
treeacc389ec96467607cf8bbab438105302127ea103 /openstackclient
parentab32f37e6715c15b9b6fb195f273c7672ef2a532 (diff)
parentfac321458166cccffc0eb1d13a986a01c9e6d33e (diff)
downloadpython-openstackclient-a42664ccaa9860c34fcd91cb4c3dbdf6805b3eb0.tar.gz
Merge "Implement "network rbac set" command"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/network/v2/network_rbac.py41
-rw-r--r--openstackclient/tests/network/v2/test_network_rbac.py56
2 files changed, 97 insertions, 0 deletions
diff --git a/openstackclient/network/v2/network_rbac.py b/openstackclient/network/v2/network_rbac.py
index 62968376..f4dfd4e7 100644
--- a/openstackclient/network/v2/network_rbac.py
+++ b/openstackclient/network/v2/network_rbac.py
@@ -186,6 +186,47 @@ class ListNetworkRBAC(command.Lister):
) for s in data))
+class SetNetworkRBAC(command.Command):
+ """Set network RBAC policy properties"""
+
+ def get_parser(self, prog_name):
+ parser = super(SetNetworkRBAC, self).get_parser(prog_name)
+ parser.add_argument(
+ 'rbac_policy',
+ metavar="<rbac-policy>",
+ help=_("RBAC policy to be modified (ID only)")
+ )
+ parser.add_argument(
+ '--target-project',
+ metavar="<target-project>",
+ help=_('The project to which the RBAC policy '
+ 'will be enforced (name or ID)')
+ )
+ parser.add_argument(
+ '--target-project-domain',
+ metavar='<target-project-domain>',
+ help=_('Domain the target project belongs to (name or ID). '
+ 'This can be used in case collisions between project names '
+ 'exist.'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.network
+ obj = client.find_rbac_policy(parsed_args.rbac_policy,
+ ignore_missing=False)
+ attrs = {}
+ if parsed_args.target_project:
+ identity_client = self.app.client_manager.identity
+ project_id = identity_common.find_project(
+ identity_client,
+ parsed_args.target_project,
+ parsed_args.target_project_domain,
+ ).id
+ attrs['target_tenant'] = project_id
+ client.update_rbac_policy(obj, **attrs)
+
+
class ShowNetworkRBAC(command.ShowOne):
"""Display network RBAC policy details"""
diff --git a/openstackclient/tests/network/v2/test_network_rbac.py b/openstackclient/tests/network/v2/test_network_rbac.py
index 5d6e9cfa..6255ada7 100644
--- a/openstackclient/tests/network/v2/test_network_rbac.py
+++ b/openstackclient/tests/network/v2/test_network_rbac.py
@@ -317,6 +317,62 @@ class TestListNetworkRABC(TestNetworkRBAC):
self.assertEqual(self.data, list(data))
+class TestSetNetworkRBAC(TestNetworkRBAC):
+
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ rbac_policy = network_fakes.FakeNetworkRBAC.create_one_network_rbac(
+ attrs={'target_tenant': project.id})
+
+ def setUp(self):
+ super(TestSetNetworkRBAC, self).setUp()
+
+ # Get the command object to test
+ self.cmd = network_rbac.SetNetworkRBAC(self.app, self.namespace)
+
+ self.network.find_rbac_policy = mock.Mock(
+ return_value=self.rbac_policy)
+ self.network.update_rbac_policy = mock.Mock(return_value=None)
+ self.projects_mock.get.return_value = self.project
+
+ def test_network_rbac_set_nothing(self):
+ arglist = [
+ self.rbac_policy.id,
+ ]
+ verifylist = [
+ ('rbac_policy', self.rbac_policy.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+ self.network.find_rbac_policy.assert_called_once_with(
+ self.rbac_policy.id, ignore_missing=False
+ )
+ attrs = {}
+ self.network.update_rbac_policy.assert_called_once_with(
+ self.rbac_policy, **attrs)
+ self.assertIsNone(result)
+
+ def test_network_rbac_set(self):
+ arglist = [
+ '--target-project', self.project.id,
+ self.rbac_policy.id,
+ ]
+ verifylist = [
+ ('target_project', self.project.id),
+ ('rbac_policy', self.rbac_policy.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+ self.network.find_rbac_policy.assert_called_once_with(
+ self.rbac_policy.id, ignore_missing=False
+ )
+ attrs = {'target_tenant': self.project.id}
+ self.network.update_rbac_policy.assert_called_once_with(
+ self.rbac_policy, **attrs)
+ self.assertIsNone(result)
+
+
class TestShowNetworkRBAC(TestNetworkRBAC):
rbac_policy = network_fakes.FakeNetworkRBAC.create_one_network_rbac()