Ed & Cameron | Common rule class for comparing openstack and ec2 rules

This commit is contained in:
cameron-r 2014-11-03 17:05:37 -06:00
parent 85473ced07
commit 6f2fc65bf4
3 changed files with 49 additions and 0 deletions

18
ec2_rule_transformer.py Normal file
View File

@ -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)

View File

@ -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)

16
rule.py Normal file
View File

@ -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())