]> git.openstreetmap.org Git - dns.git/blobdiff - bin/mkgeo
Add openstreetmap.gay. Transfer to Gandi in 60 days
[dns.git] / bin / mkgeo
index 9cfb6c124c6b9e421935af4126136df7c17426d5..6944c456c550631034ac1a9045802a4f1845d4e3 100755 (executable)
--- a/bin/mkgeo
+++ b/bin/mkgeo
@@ -9,14 +9,14 @@ use IO::File;
 use Math::Trig qw(deg2rad pip2 great_circle_distance);
 use JSON::XS;
 use LWP::UserAgent;
-use YAML;
+use YAML::XS qw(LoadFile DumpFile);
 
 my $originfile = shift @ARGV;
 my $clusterfile = shift @ARGV;
 my $zone = shift @ARGV;
 my $targetoriginfile = shift @ARGV;
-my $origins = YAML::LoadFile($originfile);
-my $clusters = YAML::LoadFile($clusterfile);
+my $origins = LoadFile($originfile);
+my $clusters = LoadFile($clusterfile);
 my $gdnsname = shift @ARGV;
 my @servers;
 
@@ -72,7 +72,7 @@ if ($ENV{STATUSCAKE_USERNAME} && $ENV{STATUSCAKE_APIKEY})
 
     if (-f "statuscake.yml")
     {
-        $cache = YAML::LoadFile("statuscake.yml");
+        $cache = LoadFile("statuscake.yml");
     }
     else
     {
@@ -119,7 +119,8 @@ if ($ENV{STATUSCAKE_USERNAME} && $ENV{STATUSCAKE_APIKEY})
         }
     }
 
-    YAML::DumpFile("statuscake.yml", $cache);
+    DumpFile("statuscake-$$.yml", $cache);
+    rename("statuscake-$$.yml", "statuscake.yml");
 }
 
 # Mark a cluster as up if any servers are up
@@ -259,11 +260,11 @@ if (!defined($gdnsname))
 
         if (my $default = $cluster->{default})
         {
-            output_server($zonefile, "${default}.${zone}", $cluster);
+            output_server($zonefile, "${default}.${zone}", $cluster, 0);
         }
         elsif (exists($cluster->{default}))
         {
-            output_server($zonefile, "${zone}", $cluster);
+            output_server($zonefile, "${zone}", $cluster, 0);
         }
     }
 }
@@ -273,11 +274,13 @@ foreach my $cluster (sort { $a->{name} cmp $b->{name} } values %$clusters)
 {
     my $name = $cluster->{name};
 
-    output_server($zonefile, "${name}.${zone}", $cluster);
-
     if (@{$cluster->{servers}} > 1)
     {
-        output_server($zonefile, "${name}-%02d.${zone}", $cluster);
+        output_server($zonefile, "${name}-%02d.${zone}", $cluster, 1);
+    }
+    else
+    {
+        output_server($zonefile, "${name}.${zone}", $cluster, 1);
     }
 }
 
@@ -337,7 +340,7 @@ if (defined($gdnsname))
     {
         my $name = $cluster->{name};
 
-        if (@{$cluster->{servers}} > 1)
+        if (@{$cluster->{servers}} > 1 && grep { $_->{status} eq "up" } @{$cluster->{servers}})
         {
             $gdnsweightedfile->print("${name} => {\n");
 
@@ -371,7 +374,7 @@ if (defined($gdnsname))
 }
 
 # Output the target details in origin format if required
-YAML::DumpFile($targetoriginfile, $targetorigins) if $targetoriginfile;
+DumpFile($targetoriginfile, $targetorigins) if $targetoriginfile;
 
 exit 0;
 
@@ -525,10 +528,11 @@ sub output_server
     my $zonefile = shift;
     my $name = shift;
     my $cluster = shift;
+    my $all = shift;
 
     while (my($index,$server) = each @{$cluster->{servers}})
     {
-        if ($server->{status} eq "up")
+        if ($all || $server->{status} eq "up")
         {
             $zonefile->printf("  A(\"${name}\", \"$server->{ipv4}\", TTL(\"10m\")),\n", $index + 1);