Skip to content

Instantly share code, notes, and snippets.

@yyuu
Created February 20, 2012 12:30
Show Gist options
  • Select an option

  • Save yyuu/1869009 to your computer and use it in GitHub Desktop.

Select an option

Save yyuu/1869009 to your computer and use it in GitHub Desktop.
dump route53 zones
#!/usr/bin/env python
#
# dump route53 zones
#
import boto.route53
import boto.exception
import os
import re
import sys
route53 = boto.route53.Route53Connection(aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY'))
response = route53.get_all_hosted_zones()
zones = dict([ (zoneinfo['Name'], zoneinfo) for zoneinfo in response['ListHostedZonesResponse']['HostedZones']])
for (zone_name, zone) in zones.iteritems():
if not zone_name.endswith('.'):
zone_name += '.'
zone_id = zone['Id']
zone_id = os.path.basename(zone_id) # FIXME: why boto doesn't return cleaner HostedZoneId?
keys = [ 'name', 'type', 'ttl', 'resource_records', 'alias_hosted_zone_id', 'alias_dns_name', 'identifier', 'weight' ]
rrsets = sorted(route53.get_all_rrsets(zone_id), lambda x, y: x.name < y.name and x.type < y.type)
print("$ORIGIN {zone_name}".format(zone_name=zone_name))
for rrset in rrsets:
attrs = dict([ (key, getattr(rrset,key)) for key in keys ])
if attrs['name'].endswith('.' + zone_name):
attrs['name'] = attrs['name'][0:-(len('.' + zone_name))]
if attrs.get('alias_dns_name'):
attrs['type'] = "TXT"
attrs['resource_records'] = [ "\"ALIAS %s\"" % (attrs['alias_dns_name'],) ]
for rr in attrs.get('resource_records'):
comments = []
if attrs.get('alias_hosted_zone_id') and attrs.get('alias_dns_name'):
comments.append("alias:{alias_hosted_zone_id}".format(**attrs))
if attrs.get('identifier') and attrs.get('weight'):
comments.append("set:{identifier}={weight}".format(**attrs))
if 0 < len(comments):
print("{name}\t{ttl} IN {type}\t{rr}\t; {comments}".format(rr=rr, comments=", ".join(comments), **attrs))
else:
print("{name}\t{ttl} IN {type}\t{rr}\t".format(rr=rr, **attrs))
# vim:set ft=python :
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment