From 079123bb0b29fba19fa1b12d545493cbbd2d7024 Mon Sep 17 00:00:00 2001 From: Richard Theis Date: Thu, 3 Dec 2015 11:20:07 -0600 Subject: [PATCH] Remote security group name not displayed for rule The 'security group rule list' command was updated to display the remote security group name for a security group rule. This was done via a new 'Remote Security Group' column. The output of the 'security group rule create' and 'security group show' commands was also updated to include 'remote_security_group' information instead of the raw 'group' information returned from the API layer. Change-Id: I5f9600338c8331966d2c658109a24b502c538106 Closes-Bug: #1520003 --- openstackclient/compute/v2/security_group.py | 6 + .../compute/v2/test_security_group_rule.py | 109 +++++++++++++++--- .../notes/bug-1520003-505af921c8afffc9.yaml | 5 + 3 files changed, 102 insertions(+), 18 deletions(-) create mode 100644 releasenotes/notes/bug-1520003-505af921c8afffc9.yaml diff --git a/openstackclient/compute/v2/security_group.py b/openstackclient/compute/v2/security_group.py index 8844f5cce8..a514085b08 100644 --- a/openstackclient/compute/v2/security_group.py +++ b/openstackclient/compute/v2/security_group.py @@ -54,6 +54,11 @@ def _xform_security_group_rule(sgroup): info['ip_protocol'] = '' elif info['ip_protocol'].lower() == 'icmp': info['port_range'] = '' + group = info.pop('group') + if 'name' in group: + info['remote_security_group'] = group['name'] + else: + info['remote_security_group'] = '' return info @@ -299,6 +304,7 @@ class ListSecurityGroupRule(lister.Lister): "IP Protocol", "IP Range", "Port Range", + "Remote Security Group", ) return (column_headers, (utils.get_item_properties( diff --git a/openstackclient/tests/compute/v2/test_security_group_rule.py b/openstackclient/tests/compute/v2/test_security_group_rule.py index cf540e021f..cfe3d46e59 100644 --- a/openstackclient/tests/compute/v2/test_security_group_rule.py +++ b/openstackclient/tests/compute/v2/test_security_group_rule.py @@ -28,13 +28,6 @@ security_group_description = 'nothing but net' security_group_rule_id = '1' security_group_rule_cidr = '0.0.0.0/0' -SECURITY_GROUP = { - 'id': security_group_id, - 'name': security_group_name, - 'description': security_group_description, - 'tenant_id': identity_fakes.project_id, -} - SECURITY_GROUP_RULE = { 'id': security_group_rule_id, 'group': {}, @@ -55,6 +48,26 @@ SECURITY_GROUP_RULE_ICMP = { 'to_port': -1, } +SECURITY_GROUP_RULE_REMOTE_GROUP = { + 'id': security_group_rule_id, + 'group': {"tenant_id": "14", "name": "default"}, + 'ip_protocol': 'tcp', + 'ip_range': {}, + 'parent_group_id': security_group_id, + 'from_port': 80, + 'to_port': 80, +} + +SECURITY_GROUP = { + 'id': security_group_id, + 'name': security_group_name, + 'description': security_group_description, + 'tenant_id': identity_fakes.project_id, + 'rules': [SECURITY_GROUP_RULE, + SECURITY_GROUP_RULE_ICMP, + SECURITY_GROUP_RULE_REMOTE_GROUP], +} + class FakeSecurityGroupRuleResource(fakes.FakeResource): @@ -122,21 +135,21 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'tcp', security_group_rule_cidr, security_group_id, '0:0', + '', ) self.assertEqual(datalist, data) @@ -174,21 +187,21 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'tcp', security_group_rule_cidr, security_group_id, '20:21', + '', ) self.assertEqual(datalist, data) @@ -196,6 +209,7 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): sg_rule = copy.deepcopy(SECURITY_GROUP_RULE) sg_rule['from_port'] = 22 sg_rule['to_port'] = 22 + sg_rule['ip_range'] = {} sg_rule['group'] = {'name': security_group_name} self.sg_rules_mock.create.return_value = FakeSecurityGroupRuleResource( None, @@ -229,21 +243,21 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {'name': security_group_name}, security_group_rule_id, 'tcp', - security_group_rule_cidr, + '', security_group_id, '22:22', + security_group_name, ) self.assertEqual(datalist, data) @@ -280,21 +294,21 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'udp', security_group_rule_cidr, security_group_id, '0:0', + '', ) self.assertEqual(datalist, data) @@ -334,21 +348,21 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'icmp', sg_rule_cidr, security_group_id, '', + '', ) self.assertEqual(datalist, data) @@ -362,3 +376,62 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): self.assertRaises(utils.ParserException, self.check_parser, self.cmd, arglist, []) + + +class TestSecurityGroupRuleList(TestSecurityGroupRule): + + def setUp(self): + super(TestSecurityGroupRuleList, self).setUp() + + self.secgroups_mock.get.return_value = FakeSecurityGroupRuleResource( + None, + copy.deepcopy(SECURITY_GROUP), + loaded=True, + ) + + # Get the command object to test + self.cmd = security_group.ListSecurityGroupRule(self.app, None) + + def test_security_group_rule_list(self): + + arglist = [ + security_group_name, + ] + verifylist = [ + ('group', security_group_name), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + + collist = ( + 'ID', + 'IP Protocol', + 'IP Range', + 'Port Range', + 'Remote Security Group', + ) + self.assertEqual(collist, columns) + datalist = (( + security_group_rule_id, + 'tcp', + security_group_rule_cidr, + '0:0', + '', + ), ( + security_group_rule_id, + 'icmp', + security_group_rule_cidr, + '', + '', + ), ( + security_group_rule_id, + 'tcp', + '', + '80:80', + 'default', + ), + ) + self.assertEqual(datalist, tuple(data)) diff --git a/releasenotes/notes/bug-1520003-505af921c8afffc9.yaml b/releasenotes/notes/bug-1520003-505af921c8afffc9.yaml new file mode 100644 index 0000000000..ca94b958f0 --- /dev/null +++ b/releasenotes/notes/bug-1520003-505af921c8afffc9.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Add remote security group to `os security group rule list` + [Bug `1520003 `_]