From ba21072a43183388e53f47bcdac074cb6246ed83 Mon Sep 17 00:00:00 2001 From: MotoKen Date: Tue, 31 Jan 2012 15:35:02 +0800 Subject: Correct checking existence of security group rule Fixes bug #900031 Change-Id: I4194610ce53d1c74bd99b6878339da6e0b6a3a73 --- nova/api/ec2/cloud.py | 19 ++++++++----------- nova/api/openstack/compute/contrib/security_groups.py | 19 ++++++++----------- 2 files changed, 16 insertions(+), 22 deletions(-) (limited to 'nova/api') diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py index 4c5e07f9f..df238de7e 100644 --- a/nova/api/ec2/cloud.py +++ b/nova/api/ec2/cloud.py @@ -594,17 +594,14 @@ class CloudController(object): defined in the given security group. """ for rule in security_group.rules: - if 'group_id' in values: - if rule['group_id'] == values['group_id']: - return rule['id'] - else: - is_duplicate = True - for key in ('cidr', 'from_port', 'to_port', 'protocol'): - if rule[key] != values[key]: - is_duplicate = False - break - if is_duplicate: - return rule['id'] + is_duplicate = True + keys = ('group_id', 'cidr', 'from_port', 'to_port', 'protocol') + for key in keys: + if rule.get(key) != values.get(key): + is_duplicate = False + break + if is_duplicate: + return rule['id'] return False def revoke_security_group_ingress(self, context, group_name=None, diff --git a/nova/api/openstack/compute/contrib/security_groups.py b/nova/api/openstack/compute/contrib/security_groups.py index 45d72bf61..1faa0537a 100644 --- a/nova/api/openstack/compute/contrib/security_groups.py +++ b/nova/api/openstack/compute/contrib/security_groups.py @@ -379,17 +379,14 @@ class SecurityGroupRulesController(SecurityGroupController): defined in the given security group. """ for rule in security_group.rules: - if 'group_id' in values: - if rule['group_id'] == values['group_id']: - return True - else: - is_duplicate = True - for key in ('cidr', 'from_port', 'to_port', 'protocol'): - if rule[key] != values[key]: - is_duplicate = False - break - if is_duplicate: - return True + is_duplicate = True + keys = ('group_id', 'cidr', 'from_port', 'to_port', 'protocol') + for key in keys: + if rule.get(key) != values.get(key): + is_duplicate = False + break + if is_duplicate: + return True return False def _rule_args_to_dict(self, context, to_port=None, from_port=None, -- cgit