Commit ae320738 by Feanil Patel

Update to 4 spaces.

parent d97e086c
...@@ -2,90 +2,112 @@ import boto ...@@ -2,90 +2,112 @@ import boto
from vpcutil import vpc_for_stack_name from vpcutil import vpc_for_stack_name
stack_name = 'testforumstack9' stack_name = 'testforumstack9'
r53 = boto.connect_route53()
# Utility Functions # Utility Functions
def add_zone_to_parent(zone, parent):
#Add a reference for the new zone to its parent zone.
parent_name = parent.Name[:-1]
zone_name = zone.Name[:-1]
change_set = boto.route53.record.ResourceRecordSets()
change = change_set.add_change('CREATE', zone_name, 'NS', 900)
change.add_value(zone.NameServers)
def get_or_create_hosted_zone(zone_name):
r53 = boto.connect_route53() def get_or_create_hosted_zone(zone_name):
hosted_zone = r53.get_hosted_zone_by_name(zone_name) # Get the parent zone.
parent_zone_name = ".".join(zone_name.split('.')[1:])
parent_zone = r53.get_hosted_zone_by_name(parent_zone_name)
if not parent_zone:
msg = "Parent zone({}) does not exist."
raise Exception(msg.format(parent_zone_name))
if not hosted_zone:
zone_data = r53.create_hosted_zone(zone_name,
comment="Created by automation.")
hosted_zone = r53.get_hosted_zone_by_name(zone_name) hosted_zone = r53.get_hosted_zone_by_name(zone_name)
return hosted_zone if not hosted_zone:
r53.create_hosted_zone(zone_name,
comment="Created by automation.")
hosted_zone = r53.get_hosted_zone_by_name(zone_name)
add_zone_to_parent(hosted_zone, parent_zone)
return hosted_zone
def elbs_for_stack_name(stack_name): def elbs_for_stack_name(stack_name):
vpc_id = vpc_for_stack_name(stack_name) vpc_id = vpc_for_stack_name(stack_name)
elbs = boto.connect_elb() elbs = boto.connect_elb()
for elb in elbs.get_all_load_balancers(): for elb in elbs.get_all_load_balancers():
if elb.vpc_id == vpc_id: if elb.vpc_id == vpc_id:
yield elb yield elb
def create_service_dns(elb, prefix, zone): def create_service_dns(elb, prefix, zone):
# Get all record sets in zone # Get all record sets in zone
r53 = boto.connect_route53(debug=2)
zone_id = zone.Id.replace("/hostedzone/","") zone_id = zone.Id.replace("/hostedzone/", "")
records = r53.get_all_rrsets(zone_id) records = r53.get_all_rrsets(zone_id)
old_names = [r.name[:-1] for r in records] old_names = [r.name[:-1] for r in records]
print(old_names) print(old_names)
dns_template = "{prefix}.{zone_name}" dns_template = "{prefix}.{zone_name}"
# Have to remove the trailing period that is on zone names. # Have to remove the trailing period that is on zone names.
zone_name = zone.Name[:-1] zone_name = zone.Name[:-1]
dns_name = dns_template.format(prefix=prefix, dns_name = dns_template.format(prefix=prefix,
zone_name=zone_name) zone_name=zone_name)
change_set = boto.route53.record.ResourceRecordSets() change_set = boto.route53.record.ResourceRecordSets()
# If the dns name already points to something. # If the dns name already points to something.
# Delete the existing connection. # Delete the existing connection.
print(dns_name) print(dns_name)
if dns_name in old_names: if dns_name in old_names:
print "adding delete" print "adding delete"
change = change_set.add_change( change = change_set.add_change(
'DELETE', 'DELETE',
dns_name, dns_name,
'CNAME', 'CNAME',
600) 600)
change.add_value(elb.dns_name) change.add_value(elb.dns_name)
change = change_set.add_change( change = change_set.add_change(
'CREATE', 'CREATE',
dns_name, dns_name,
'CNAME', 'CNAME',
600 ) 600)
change.add_value(elb.dns_name) change.add_value(elb.dns_name)
print change_set.to_xml() print change_set.to_xml()
r53.change_rrsets(zone_id, change_set.to_xml()) r53.change_rrsets(zone_id, change_set.to_xml())
if __name__ == "__main__":
# Create DNS for edxapp and xqueue. # Create DNS for edxapp and xqueue.
dns_settings = { dns_settings = {
'edxapp' : [ 'courses', 'studio' ], 'edxapp': ['courses', 'studio'],
'xqueue' : [ 'xqueue' ], 'xqueue': ['xqueue'],
'rabbit' : [ 'rabbit' ], 'rabbit': ['rabbit'],
'xserver' : [ 'xserver' ], 'xserver': ['xserver'],
'worker' : [ 'worker' ], 'worker': ['worker'],
} 'forum': ['forum'],
}
# Create a zone for the stack. # Create a zone for the stack.
zone_name = "{}.vpc.edx.org".format(stack_name) zone_name = "{}.vpc.edx.org".format(stack_name)
zone = get_or_create_hosted_zone(zone_name) zone = get_or_create_hosted_zone(zone_name)
stack_elbs = elbs_for_stack_name(stack_name) stack_elbs = elbs_for_stack_name(stack_name)
for elb in stack_elbs: for elb in stack_elbs:
for service, dns_prefixes in dns_settings.items(): for service, dns_prefixes in dns_settings.items():
if service in elb.dns_name.lower(): #FIXME this breaks when the service name is in the stack name ie. testforumstack.
for prefix in dns_prefixes: if service in elb.dns_name.lower():
create_service_dns(elb, prefix, zone) for prefix in dns_prefixes:
create_service_dns(elb, prefix, zone)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment