diff --git a/ec2_rule_transformer.py b/ec2_rule_transformer.py index d6731f8..a2e57ea 100644 --- a/ec2_rule_transformer.py +++ b/ec2_rule_transformer.py @@ -9,7 +9,7 @@ class EC2RuleTransformer: def to_rule(self, ec2_rule): rule_args = deepcopy(vars(ec2_rule)) - del rule_args['grants'] + self._delete_unused_rule_args(rule_args) if ec2_rule.grants[0].cidr_ip: rule_args['ip_range'] = ec2_rule.grants[0].cidr_ip @@ -17,4 +17,8 @@ class EC2RuleTransformer: group_id = ec2_rule.grants[0].group_id rule_args['group_name'] = self.ec2_connection.get_all_security_groups(group_ids=group_id)[0].name - return Rule(**rule_args) \ No newline at end of file + return Rule(**rule_args) + + def _delete_unused_rule_args(self, rule_args): + del rule_args['grants'] + del rule_args['parent'] \ No newline at end of file diff --git a/openstack_rule_transformer.py b/openstack_rule_transformer.py index b78ed4e..5a84cb9 100644 --- a/openstack_rule_transformer.py +++ b/openstack_rule_transformer.py @@ -7,9 +7,16 @@ class OpenstackRuleTransformer: def to_rule(self, openstack_rule): rule_args = deepcopy(openstack_rule) + self._delete_unused_rule_args(rule_args) + if 'cidr' in openstack_rule['ip_range']: rule_args['ip_range'] = openstack_rule['ip_range']['cidr'] else: rule_args['group_name'] = openstack_rule['group']['name'] - return Rule(**openstack_rule) \ No newline at end of file + return Rule(**rule_args) + + def _delete_unused_rule_args(self, rule_args): + del rule_args['group'] + del rule_args['parent_group_id'] + del rule_args['id'] \ No newline at end of file diff --git a/tests/unit/fake_ec2_rule_builder.py b/tests/unit/fake_ec2_rule_builder.py index 1dd43d6..bf6ccb1 100644 --- a/tests/unit/fake_ec2_rule_builder.py +++ b/tests/unit/fake_ec2_rule_builder.py @@ -2,7 +2,7 @@ from collections import namedtuple class FakeEC2RuleBuilder(): - EC2Rule = namedtuple('EC2Rule', 'ip_protocol from_port to_port grants') + EC2Rule = namedtuple('EC2Rule', 'ip_protocol from_port to_port grants parent') GroupOrCIDR = namedtuple('GroupOrCIDR', 'cidr_ip group_id') def __init__(self): @@ -11,6 +11,7 @@ class FakeEC2RuleBuilder(): self.to_port = '3333' self.ip_range = '0.0.0.0/0' self.allowed_security_group_id = None + self.parent = None @staticmethod def an_ec2_rule(): @@ -40,4 +41,4 @@ class FakeEC2RuleBuilder(): def build(self): grants = [self.GroupOrCIDR(self.ip_range, self.allowed_security_group_id)] - return self.EC2Rule(self.ip_protocol, self.from_port, self.to_port, grants) + return self.EC2Rule(self.ip_protocol, self.from_port, self.to_port, grants, self.parent) diff --git a/tests/unit/test_openstack_rule_transformer.py b/tests/unit/test_openstack_rule_transformer.py new file mode 100644 index 0000000..6256455 --- /dev/null +++ b/tests/unit/test_openstack_rule_transformer.py @@ -0,0 +1,22 @@ +import unittest + +from nova.virt.ec2.openstack_rule_transformer import OpenstackRuleTransformer + + +class TestEC2RuleTransformer(unittest.TestCase): + + def setUp(self): + self.openstack_rule_transformer = OpenstackRuleTransformer() + + def test_should_copy_to_port(self): + openstack_rule = { + 'ip_protocol': 'abc', + 'from_port': 123, + 'to_port': 456, + 'group': {}, + 'parent_group_id': 55, + 'ip_range': {'cidr': '9.8.7.6/55'}, + 'id': 18 + } + rule = self.openstack_rule_transformer.to_rule(openstack_rule) + self.assertEqual(rule.to_port, openstack_rule['to_port']) \ No newline at end of file