summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsridhargaddam <sridhar.gaddam@enovance.com>2014-11-19 10:03:02 +0000
committersridhargaddam <sridhar.gaddam@enovance.com>2015-01-15 14:34:00 +0000
commit845f4618f4818d3f536eda1dde8d9b9d860f0417 (patch)
treef1b1ec2f3bf1885a2869d4fe7342634a775091dd
parentfe3d363b2ca67f130a4df83563177cdc45fde792 (diff)
downloadpython-neutronclient-845f4618f4818d3f536eda1dde8d9b9d860f0417.tar.gz
Fix KeyError when filtering SG rule listing
extend_list API of ListSecurityGroupRule class assumes that the data includes security_group_id and remote_group_id fields, which may not be the case when we filter on other fields. This patch addresses this issue. Closes-Bug: #1359230 Change-Id: Icb38e6e926ae441116ac4a895650f80c24d373a6
-rw-r--r--neutronclient/neutron/v2_0/securitygroup.py6
-rw-r--r--neutronclient/tests/unit/test_cli20_securitygroup.py23
2 files changed, 17 insertions, 12 deletions
diff --git a/neutronclient/neutron/v2_0/securitygroup.py b/neutronclient/neutron/v2_0/securitygroup.py
index a1a2bf5..7f27eac 100644
--- a/neutronclient/neutron/v2_0/securitygroup.py
+++ b/neutronclient/neutron/v2_0/securitygroup.py
@@ -134,7 +134,8 @@ class ListSecurityGroupRule(neutronV20.ListCommand):
sec_group_ids = set()
for rule in data:
for key in self.replace_rules:
- sec_group_ids.add(rule[key])
+ if key in rule:
+ sec_group_ids.add(rule[key])
sec_group_ids = list(sec_group_ids)
def _get_sec_group_list(sec_group_ids):
@@ -164,7 +165,8 @@ class ListSecurityGroupRule(neutronV20.ListCommand):
for sg in secgroups if sg['name']])
for rule in data:
for key in self.replace_rules:
- rule[key] = sg_dict.get(rule[key], rule[key])
+ if key in rule:
+ rule[key] = sg_dict.get(rule[key], rule[key])
def setup_columns(self, info, parsed_args):
parsed_args.columns = self.replace_columns(parsed_args.columns,
diff --git a/neutronclient/tests/unit/test_cli20_securitygroup.py b/neutronclient/tests/unit/test_cli20_securitygroup.py
index 788da53..a906621 100644
--- a/neutronclient/tests/unit/test_cli20_securitygroup.py
+++ b/neutronclient/tests/unit/test_cli20_securitygroup.py
@@ -189,14 +189,9 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
mox.IgnoreArg())
self._test_list_resources(resources, cmd, True)
- def _test_extend_list(self, mox_calls):
+ def _test_extend_list(self, mox_calls, data):
resources = "security_groups"
- data = [{'name': 'default',
- 'security_group_id': 'secgroupid%02d' % i,
- 'remote_group_id': 'remgroupid%02d' % i}
- for i in range(10)]
-
cmd = securitygroup.ListSecurityGroupRule(
test_cli20.MyApp(sys.stdout), None)
self.mox.StubOutWithMock(cmd, "get_client")
@@ -226,8 +221,9 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
sec_group_ids = set()
for rule in data:
for key in replace_rules:
- sec_group_ids.add(rule[key])
- response.append({'id': rule[key], 'name': 'default'})
+ if rule.get(key):
+ sec_group_ids.add(rule[key])
+ response.append({'id': rule[key], 'name': 'default'})
sec_group_ids = list(sec_group_ids)
result = []
@@ -260,7 +256,10 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(
responses[0]['response'])
- self._test_extend_list(mox_calls)
+ data = [{'name': 'default',
+ 'remote_group_id': 'remgroupid%02d' % i}
+ for i in range(10)]
+ self._test_extend_list(mox_calls, data)
def test_extend_list_exceed_max_uri_len(self):
def mox_calls(path, data):
@@ -282,7 +281,11 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(
item['response'])
- self._test_extend_list(mox_calls)
+ data = [{'name': 'default',
+ 'security_group_id': 'secgroupid%02d' % i,
+ 'remote_group_id': 'remgroupid%02d' % i}
+ for i in range(10)]
+ self._test_extend_list(mox_calls, data)
def test_list_security_group_rules_pagination(self):
resources = "security_group_rules"