Mass-migrating websites - DNS changes tracking

| | Comments (0) | TrackBacks (0)
First shot - migrate several hundreds of websites from one server to another... Copying is a simple task... creating config files is simple task... changing DNS records is boring (and simple)... but keeping track of which DNS domains were properly propagated and which not is a stupid and annoying job... Perl to the rescue!
This is based on several assumptions:
  • we use apache2-like way of configuration - all virtual hosts in separate files
  • each file has one ServerName statement and possibly ServerAlias with unlimited amount of names following it
  • each file has the same name as domain - either with or without 'www' at the beginning (so for sure it has at least one dot in the name)
  • we are only interested in the DNS records pointing to the right IP

I rolled out a simple perl script that does it for me. As most of the domains I manage have TTL between 20 minutes and 3 hours I run it several times a day and just check the list of domains that were transferred or not...

#!/usr/bin/perl
use strict;
my @files=glob ("*.*");
my %checks;
my $k;
my $expected_IP = '11.22.33.44';
foreach my $k (@files) {
open (FH, $k);
while(<FH>) {
chomp;
if (/Server(Name|Alias)s+(.*?)$/i) {
$checks{$k} .= "$2 ";
}
}
}
my (%OK, %NOK);
foreach my $k (sort keys %checks) {
my @t = split(/s+/, $checks{$k});
print "Testing file $kn";
foreach my $h (sort @t) {
next if length($h) < 5;
my $r = `host -t A $h`;
if ($r =~ /SERVFAIL/) {
print " - $h (domain NOT REGISTERED)n";
} elsif ($r =~ /NXDOMAIN/) {
print " - $h (domain exists but HOST UNKNOWN)n";
} elsif (length($r) < length($h)) {
print " - $h (query returned NO DATA at all)n";
} else {
$r =~ m/s+(d{1,3}.d{1,3}.d{1,3}.d{1,3})$/;
$1 eq $expected_IP ? print " + $hn" : print " - $h ($1)n";
}
}
}

As a result I get a list like (domain names are fake of course):

Testing file test.domain.com
+ test.domain.com (11.22.33.44)
- www.test.domain.com (domain exists but HOST UNKNOWN)
Testing file wp.pl
- wp.pl (212.77.100.101)
- www.wp.pl (212.77.100.101)

 

... as a finishing touch - cron it, pipe it to email...

heck-DNS.pl | mail lazy-admin@somewhere.com -t "DNS domains maps on `date`"

 

Have fun!

0 TrackBacks

Listed below are links to blogs that reference this entry: Mass-migrating websites - DNS changes tracking.

TrackBack URL for this entry: http://www.ctrl-alt-del.cc/cgi-bin/mt-tb.cgi/2

Leave a comment

Creative Commons License
This weblog is licensed under a Creative Commons License.