From 6f2fc65bf48bacc30f31c4fbb91e12eb8499ff14 Mon Sep 17 00:00:00 2001 From: cameron-r Date: Mon, 3 Nov 2014 17:05:37 -0600 Subject: [PATCH] Ed & Cameron | Common rule class for comparing openstack and ec2 rules --- ec2_rule_transformer.py | 18 ++++++++++++++++++ openstack_rule_transformer.py | 15 +++++++++++++++ rule.py | 16 ++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 ec2_rule_transformer.py create mode 100644 openstack_rule_transformer.py create mode 100644 rule.py diff --git a/ec2_rule_transformer.py b/ec2_rule_transformer.py new file mode 100644 index 0000000..64bb25f --- /dev/null +++ b/ec2_rule_transformer.py @@ -0,0 +1,18 @@ +from copy import deepcopy +from rule import Rule + + +class EC2RuleTransformer: + + def __init__(self, ec2_connection): + self.ec2_connection = ec2_connection + + def to_rule(self, ec2_rule): + rule_args = deepcopy(ec2_rule) + + if ec2_rule.grants[0].cidr_ip: + rule_args['ip_range'] = ec2_rule.grants[0].cidr_ip + else: + group_id = ec2_rule.grants[0].group_id + rule_args['group_name'] = self.ec2_connection.get_all_security_groups(group_ids=group_id)[0] + return Rule(**ec2_rule) \ No newline at end of file diff --git a/openstack_rule_transformer.py b/openstack_rule_transformer.py new file mode 100644 index 0000000..562e0c8 --- /dev/null +++ b/openstack_rule_transformer.py @@ -0,0 +1,15 @@ +from copy import deepcopy +from rule import Rule + + +class OpenStackRuleTransformer: + + def to_rule(self, openstack_rule): + rule_args = deepcopy(openstack_rule) + + 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 diff --git a/rule.py b/rule.py new file mode 100644 index 0000000..fc01ac8 --- /dev/null +++ b/rule.py @@ -0,0 +1,16 @@ +class Rule: + def __init__(self, ip_protocol, from_port, to_port, ip_range=None, group_name=None): + self.ip_protocol = ip_protocol + self.from_port = from_port + self.to_port = to_port + self.ip_range = ip_range + self.group_name = group_name + + def __key(self): + return self.ip_protocol, self.from_port, self.to_port, self.ip_range, self.group_name + + def __eq__(self, other): + return self.__key() == other.__key() + + def __hash__(self): + return hash(self.__key()) \ No newline at end of file