Skip to content

Instantly share code, notes, and snippets.

@extraordinaire
Last active August 29, 2015 14:04
Show Gist options
  • Save extraordinaire/04bf14e01d2b3d3d98d2 to your computer and use it in GitHub Desktop.
Save extraordinaire/04bf14e01d2b3d3d98d2 to your computer and use it in GitHub Desktop.
Ansible play that creates Route53 records based on AutoScaling groups

ASG Route53 Updater

At TVbeat we run this on a cron within each of our cloudformation stacks.

R53 records look like zookeeper-staging.example.com

Requirements

ansible :) & awscli: sudo pip install awscli

EC2 IAM policy:

ec2:DescribeInstances

{"Statement":[{"Resource":["*"],"Action":["ec2:DescribeInstances"],"Effect":"Allow"}]}

autoscaling:DescribeAutoScalingGroups

{"Statement":[{"Resource":["*"],"Action":["autoscaling:DescribeAutoScalingGroups"],"Effect":"Allow"}]}

route53:*

{"Statement":[{"Resource":["*"],"Action":["route53:*"],"Effect":"Allow"}]}
---
- hosts: all
gather_facts: true
connection: local
vars:
ansible_local:
tvbeat:
region: "eu-west-1"
route53_zone_name: example.com
stack_name: "staging"
asgs:
zookeeper: "zookeeper-AutoScalingGroup-id"
worker: ""
mongo: ""
redis: ""
tasks:
- name: describe ASGs
shell: aws autoscaling describe-auto-scaling-groups --region {{ ansible_local.tvbeat.region }} --auto-scaling-group-names {{ item.value }} --query "AutoScalingGroups[].Instances[].InstanceId" --output text
register: instance_ids
with_dict: ansible_local.tvbeat.asgs
- name: find instance ips
shell: aws ec2 describe-instances --region {{ ansible_local.tvbeat.region }} --query "Reservations[].Instances[].PrivateIpAddress" --instance-ids {{ item.stdout }} --output text
with_items: instance_ids.results
register: instance_ips
- name: create record set
when: item.stdout|length > 0
route53: >
command=create
zone={{ ansible_local.tvbeat.route53_zone_name }}
record={{ item.item.item.key }}-{{ ansible_local.tvbeat.stack_name }}.{{ ansible_local.tvbeat.route53_zone_name }}
type=A
ttl=5
value={{ item.stdout.split("\t")|join(",") }}
overwrite=true
with_items: instance_ips.results
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment