Add route53 support to cloudformation.

This commit is contained in:
Steve Pulec 2015-01-17 10:17:25 -05:00
commit 5d5f241b99
5 changed files with 131 additions and 9 deletions

View file

@ -8,13 +8,43 @@ class FakeZone(object):
def __init__(self, name, id_):
self.name = name
self.id = id_
self.rrsets = {}
self.rrsets = []
def add_rrset(self, name, rrset):
self.rrsets[name] = rrset
self.rrsets.append(rrset)
def delete_rrset(self, name):
self.rrsets.pop(name, None)
self.rrsets = [record_set for record_set in self.rrsets if record_set['Name'] != name]
@property
def physical_resource_id(self):
return self.name
@classmethod
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
properties = cloudformation_json['Properties']
name = properties["Name"]
hosted_zone = route53_backend.create_hosted_zone(name)
return hosted_zone
class RecordSetGroup(object):
def __init__(self, record_sets):
self.record_sets = record_sets
@classmethod
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
properties = cloudformation_json['Properties']
zone_name = properties["HostedZoneName"]
hosted_zone = route53_backend.get_hosted_zone_by_name(zone_name)
record_sets = properties["RecordSets"]
for record_set in record_sets:
hosted_zone.add_rrset(record_set["Name"], record_set)
record_set_group = RecordSetGroup(record_sets)
return record_set_group
class Route53Backend(BaseBackend):
@ -34,12 +64,16 @@ class Route53Backend(BaseBackend):
def get_hosted_zone(self, id_):
return self.zones.get(id_)
def get_hosted_zone_by_name(self, name):
for zone in self.get_all_hosted_zones():
if zone.name == name:
return zone
def delete_hosted_zone(self, id_):
zone = self.zones.get(id_)
if zone:
del self.zones[id_]
return zone
return None
route53_backend = Route53Backend()