#!/bin/sh set -e . /etc/ec2-credentials/ec2_options ec2-describe-instances | awk ' BEGIN { FS="\t" printf "USE pdns;\n"; printf "BEGIN;\n"; printf "SET @ec2domain = (SELECT id FROM domains WHERE name = '\''ec2.kumina.nl'\'');\n"; printf "SET @now = CAST(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) / 60 + 2000000000 AS UNSIGNED);\n"; # Update SOA record. printf "UPDATE records SET content = CONCAT('\''ns1.kumina.nl hostmaster.kumina.nl '\'', @now), change_date = @now WHERE domain_id = @ec2domain AND type = '\''SOA'\'';\n"; # Purge records from hosts that we haven'\''t seen for at least a month. printf "DELETE FROM records WHERE (change_date < @now - 60 * 24 * 7 OR change_date > @now + 60) AND domain_id = @ec2domain AND type = '\''CNAME'\'';\n"; } /^INSTANCE/ { # Save dynamic hostname generated by EC2. if ($6 == "running") hostname[$2] = $4; } /^TAG/ { if ($2 == "instance" && hostname[$3] != "" && $4 == "hostname") { # Hostname tuple. Create new or update DNS entry. printf "DELETE FROM records WHERE name = '\''%s.ec2.kumina.nl'\'' AND type = '\''CNAME'\'' AND domain_id = @ec2domain;\n", $5; printf "INSERT INTO records (name, type, content, domain_id, ttl, prio, change_date) VALUES ('\''%s.ec2.kumina.nl'\'', '\''CNAME'\'', '\''%s'\'', @ec2domain, 300, 0, @now);\n", $5, hostname[$3]; } } END { printf "COMMIT;\n"; } ' | mysql --defaults-file=/etc/mysql/debian.cnf