Generate A records for each cluster based on which servers are up
authorTom Hughes <tom@compton.nu>
Thu, 1 Aug 2013 12:36:19 +0000 (13:36 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 1 Aug 2013 12:36:19 +0000 (13:36 +0100)
bin/mkgeo
src/openstreetmap
src/tile.openstreetmap

index 8d36c066ef520ac8d456c88e5d1132c6276c4863..9ec063e0fc9148529d22ea44faaddb503d8d68de 100755 (executable)
--- a/bin/mkgeo
+++ b/bin/mkgeo
@@ -13,7 +13,7 @@ use YAML;
 my $source = shift @ARGV;
 my $zone = shift @ARGV;
 my $clusters = YAML::LoadFile("src/${source}");
-my $servers = {};
+my @servers;
 
 # Initialise cluster details
 while (my($name,$cluster) = each %$clusters)
@@ -22,25 +22,27 @@ while (my($name,$cluster) = each %$clusters)
     {
         $cluster->{bandwidth} = 0;
 
-        while (my($name,$server) = each %{$cluster->{servers}})
+        foreach my $server (@{$cluster->{servers}})
         {
             $server->{cluster} = $cluster;
             $cluster->{bandwidth} = $cluster->{bandwidth} + $server->{bandwidth};
 
-            $servers->{$name} = $server;
+            push @servers, $server;
         }
     }
     else
     {
-        $servers->{$name} = {
+        my $server = {
             cluster => $cluster,
             pingdom => $cluster->{pingdom},
-            bandwidth => $cluster->{bandwidth}
+            bandwidth => $cluster->{bandwidth},
+            ipv4 => $cluster->{ipv4},
+            ipv6 => $cluster->{ipv6}
         };
 
-        $cluster->{servers} = {
-            $name => $servers->{$name}
-        };
+        $cluster->{servers} = [ $server ];
+
+        push @servers, $server;
     }
 
     $cluster->{name} = $name;
@@ -56,10 +58,8 @@ while (my($name,$cluster) = each %$clusters)
 }
 
 # Initialise server details
-while (my($name,$server) = each %$servers)
+foreach my $server (@servers)
 {
-    $server->{name} = $name;
-
     if ($ENV{PINGDOM_USERNAME} && $ENV{PINGDOM_PASSWORD})
     {
         $server->{status} = "down";
@@ -78,7 +78,7 @@ if ($ENV{PINGDOM_USERNAME} && $ENV{PINGDOM_PASSWORD})
     $ua->default_header("App-Key", "2cohi62u5haxvqmypk3ljqqrze1jufrh");
     $ua->credentials("api.pingdom.com:443", "Pingdom API", $ENV{PINGDOM_USERNAME}, $ENV{PINGDOM_PASSWORD});
 
-    foreach my $server (values %$servers)
+    foreach my $server (@servers)
     {
         if (my $checkid = $server->{pingdom})
         {
@@ -213,14 +213,7 @@ foreach my $country (values %countries)
     }
 
     $zonefile->print("# $country->{name}\n");
-
-    while (my($name,$server) = each %{$cluster->{servers}})
-    {
-        if ($server->{status} eq "up")
-        {
-            $zonefile->print("C\L$country->{code}\E.${zone}:$server->{name}.${zone}:600\n");
-        }
-    }
+    $zonefile->print("C\L$country->{code}\E.${zone}:$cluster->{name}.${zone}:600\n");
 
     push @json, {
         type => "Feature",
@@ -237,13 +230,28 @@ foreach my $country (values %countries)
 }
 
 # Output default records for IPs that can't be mapped to a country
-foreach my $cluster (grep { $_->{default} } values %$clusters)
+foreach my $cluster (grep { $clusters->{$_}->{default} } keys %$clusters)
 {
     $zonefile->print("# Unknown countries\n");
+    $zonefile->print("Cxx.${zone}:${cluster}.${zone}:600\n");
+}
 
-    while (my($name,$server) = each %{$cluster->{servers}})
+$zonefile->print("# Servers\n");
+
+# Output A records for each cluster
+while (my($name,$cluster) = each %$clusters)
+{
+    foreach my $server (@{$cluster->{servers}})
     {
-        $zonefile->print("Cxx.${zone}:${name}.${zone}:600\n");
+        if ($server->{status} eq "up")
+        {
+            $zonefile->print("+${name}.${zone}:$server->{ipv4}:600\n");
+
+            if ($server->{ipv6})
+            {
+#                $zonefile->print("3${name}.${zone}:$server->{ipv6}:600\n");
+            }
+        }
     }
 }
 
index 99e6ee30de23180467c979b604b9b5f4edab5cba..ca2fd6c9fdf1822920c4d9bc7b707839c0293420 100644 (file)
@@ -125,26 +125,6 @@ Cc.tile.openstreetmap:tile.geo.openstreetmap.org:600
 +yevaud.ucl.openstreetmap:10.0.0.15
 +yevaud.oob.openstreetmap:10.0.1.15
 
-# Map geographic zones to tile servers
-
-+sjobo.tile.openstreetmap:85.30.190.241:3600
-# 3sjobo.tile.openstreetmap:2a02008000003ff8022264fffe2a2714:3600
-+moscow.tile.openstreetmap:130.193.62.73:3600
-+brisbane.tile.openstreetmap:203.26.72.12:3600
-# 3brisbane.tile.openstreetmap:2402640000010006021708fffe5640c3:3600
-+pau.tile.openstreetmap:193.55.222.229:3600
-+amsterdam.tile.openstreetmap:134.90.146.26:3600
-+oslo.tile.openstreetmap:31.169.50.10:3600
-+sanfrancisco.tile.openstreetmap:64.62.205.202:3600
-+lyon.tile.openstreetmap:77.95.70.166:3600
-# 3lyon.openstreetmap:200107f80047002100000000000000a6:3600
-+beauharnois.tile.openstreetmap:142.4.213.166:3600
-# 3beauharnois.tile.openstreetmap:26075300006012a60000000000000001:3600
-+falkenstein.tile.openstreetmap:5.9.150.236:3600
-# 3falkenstein.openstreetmap:2a0104f8019033eb0000000000000002:3600
-+provo-01.tile.openstreetmap:192.163.219.36
-+provo-02.tile.openstreetmap:192.163.219.40
-
 # Services machine
 
 +horntail.openstreetmap:193.63.75.101
index 0e62853de1a7440ef187ff4d2d8f501e9edab0f5..db89eda3137364f14f01c6bc29f1ba4032f132ce 100644 (file)
@@ -6,6 +6,8 @@ sjobo:
   pingdom: 546505
   colour: "#bfa730"
   bandwidth: 90
+  ipv4: 85.30.190.241
+  ipv6: 2a02008000003ff8022264fffe2a2714
 
 # Moscow, RU
 # BW Limit: 1000Mb/s
@@ -15,6 +17,7 @@ moscow:
   pingdom: 659912
   colour: "#412c84"
   bandwidth: 55
+  ipv4: 130.193.62.73
   allowed:
     countries:
       - AZ
@@ -40,6 +43,8 @@ brisbane:
   pingdom: 657940
   colour: "#269926"
   bandwidth: 20
+  ipv4: 203.26.72.12
+  ipv6: 2402640000010006021708fffe5640c3
   allowed:
     continents:
       - OC
@@ -52,6 +57,7 @@ pau:
   pingdom: 718192
   colour: "#bf8230"
   bandwidth: 60
+  ipv4: 193.55.222.229
   allowed:
     continents:
       - EU
@@ -64,6 +70,7 @@ amsterdam:
   pingdom: 766251
   colour: "#a1b92e"
   bandwidth: 50
+  ipv4: 134.90.146.26
   default: true
 
 # Oslo, NO
@@ -74,6 +81,7 @@ oslo:
   pingdom: 769267
   colour: "#7c1f7c"
   bandwidth: 30
+  ipv4: 31.169.50.10
   allowed:
     continents:
       - EU
@@ -86,6 +94,7 @@ sanfrancisco:
   pingdom: 788480
   colour: "#25567b"
   bandwidth: 22
+  ipv4: 64.62.205.202
 
 # Lyon, FR
 # BW Limit: 100Mb/s
@@ -95,6 +104,8 @@ lyon:
   pingdom: 789594
   colour: "#bf6530"
   bandwidth: 30
+  ipv4: 77.95.70.166
+  ipv6: 200107f80047002100000000000000a6
 
 # Beauharnois, CA
 beauharnois:
@@ -103,6 +114,8 @@ beauharnois:
   pingdom: 824231
   colour: "#bfb830"
   bandwidth: 50
+  ipv4: 142.4.213.166
+  ipv6: 26075300006012a60000000000000001
 
 # Falkenstein, DE
 falkenstein:
@@ -111,6 +124,8 @@ falkenstein:
   pingdom: 834186
   colour: "#562781"
   bandwidth: 50
+  ipv4: 5.9.150.236
+  ipv6: 2a0104f8019033eb0000000000000002
   allowed:
     continents:
       - EU
@@ -121,12 +136,12 @@ provo:
   lon: -111.642765
   colour: "#1f7c65"
   servers:
-    provo-01:
-      pingdom: 909444
+    - pingdom: 909444
       bandwidth: 10
-#    provo-02:
-#      pingdom: 909445
-#      bandwidth: 10
+      ipv4: 192.163.219.36
+    - pingdom: 909445
+      bandwidth: 10
+      ipv4: 192.163.219.40
 
 # Spare colours:
 #