Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Commit

Permalink
Merge pull request #214 from kennu/master
Browse files Browse the repository at this point in the history
Route 53 Alias Resource Record Sets
  • Loading branch information
kopertop committed May 26, 2011
2 parents 979cd2d + ff602b5 commit 69e9004
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 10 deletions.
18 changes: 17 additions & 1 deletion bin/route53
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def get(conn, hosted_zone_id, type=None, name=None, maxitems=None):
response = conn.get_all_rrsets(hosted_zone_id, type, name, maxitems=maxitems)[:]
print '%-40s %-5s %-20s %s' % ("Name", "Type", "TTL", "Value(s)")
for record in response:
print '%-40s %-5s %-20s %s' % (record.name, record.type, record.ttl, ",".join(record.resource_records))
print '%-40s %-5s %-20s %s' % (record.name, record.type, record.ttl, record.to_print())


def add_record(conn, hosted_zone_id, name, type, value, ttl=600, comment=""):
Expand All @@ -56,6 +56,22 @@ def del_record(conn, hosted_zone_id, name, type, value, ttl=600, comment=""):
change.add_value(value)
print changes.commit()

def add_alias(conn, hosted_zone_id, name, type, alias_hosted_zone_id, alias_dns_name, comment=""):
"""Add a new alias to a zone"""
from boto.route53.record import ResourceRecordSets
changes = ResourceRecordSets(conn, hosted_zone_id, comment)
change = changes.add_change("CREATE", name, type)
change.set_alias(alias_hosted_zone_id, alias_dns_name)
print changes.commit()

def del_alias(conn, hosted_zone_id, name, type, alias_hosted_zone_id, alias_dns_name, comment=""):
"""Delete an alias from a zone"""
from boto.route53.record import ResourceRecordSets
changes = ResourceRecordSets(conn, hosted_zone_id, comment)
change = changes.add_change("DELETE", name, type)
change.set_alias(alias_hosted_zone_id, alias_dns_name)
print changes.commit()

def change_record(conn, hosted_zone_id, name, type, values, ttl=600, comment=""):
"""Delete and then add a record to a zone"""
from boto.route53.record import ResourceRecordSets
Expand Down
54 changes: 45 additions & 9 deletions boto/route53/record.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
class ResourceRecordSets(ResultSet):

ChangeResourceRecordSetsBody = """<?xml version="1.0" encoding="UTF-8"?>
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2011-05-05/">
<ChangeBatch>
<Comment>%(comment)s</Comment>
<Changes>%(changes)s</Changes>
Expand Down Expand Up @@ -104,40 +104,72 @@ class Record(object):
XMLBody = """<ResourceRecordSet>
<Name>%(name)s</Name>
<Type>%(type)s</Type>
<TTL>%(ttl)s</TTL>
<ResourceRecords>%(records)s</ResourceRecords>
%(body)s
</ResourceRecordSet>"""

ResourceRecordsBody = """
<TTL>%(ttl)s</TTL>
<ResourceRecords>
%(records)s
</ResourceRecords>"""

ResourceRecordBody = """<ResourceRecord>
<Value>%s</Value>
</ResourceRecord>"""

AliasBody = """<AliasTarget>
<HostedZoneId>%s</HostedZoneId>
<DNSName>%s</DNSName>
</AliasTarget>"""

def __init__(self, name=None, type=None, ttl=600, resource_records=None):
def __init__(self, name=None, type=None, ttl=600, resource_records=None, alias_hosted_zone_id=None, alias_dns_name=None):
self.name = name
self.type = type
self.ttl = ttl
if resource_records == None:
resource_records = []
self.resource_records = resource_records
self.alias_hosted_zone_id = alias_hosted_zone_id
self.alias_dns_name = alias_dns_name

def add_value(self, value):
"""Add a resource record value"""
self.resource_records.append(value)

def set_alias(self, alias_hosted_zone_id, alias_dns_name):
"""Make this an alias resource record set"""
self.alias_hosted_zone_id = alias_hosted_zone_id
self.alias_dns_name = alias_dns_name

def to_xml(self):
"""Spit this resource record set out as XML"""
records = ""
for r in self.resource_records:
records += self.ResourceRecordBody % r
if self.alias_hosted_zone_id != None and self.alias_dns_name != None:
# Use alias
body = self.AliasBody % (self.alias_hosted_zone_id, self.alias_dns_name)
else:
# Use resource record(s)
records = ""
for r in self.resource_records:
records += self.ResourceRecordBody % r
body = self.ResourceRecordsBody % {
"ttl": self.ttl,
"records": records,
}
params = {
"name": self.name,
"type": self.type,
"ttl": self.ttl,
"records": records
"body": body,
}
return self.XMLBody % params

def to_print(self):
if self.alias_hosted_zone_id != None and self.alias_dns_name != None:
# Show alias
return 'ALIAS ' + self.alias_hosted_zone_id + ' ' + self.alias_dns_name
else:
# Show resource record(s)
return ",".join(self.resource_records)

def endElement(self, name, value, connection):
if name == 'Name':
self.name = value
Expand All @@ -147,6 +179,10 @@ def endElement(self, name, value, connection):
self.ttl = value
elif name == 'Value':
self.resource_records.append(value)
elif name == 'HostedZoneId':
self.alias_hosted_zone_id = value
elif name == 'DNSName':
self.alias_dns_name = value

def startElement(self, name, attrs, connection):
return None

0 comments on commit 69e9004

Please sign in to comment.