Add support for generating and distributing gdnsd maps and resources
authorTom Hughes <tom@compton.nu>
Thu, 13 Jun 2019 16:19:30 +0000 (17:19 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 13 Jun 2019 16:24:19 +0000 (17:24 +0100)
.gitignore
Makefile
bin/mkgeo
gdns/.gitkeep [new file with mode: 0644]

index 2f82292..02a0651 100644 (file)
@@ -1,4 +1,5 @@
 data/
+gdns/
 json/
 kml/
 origins/
index 3cdf57f..4cc2d7c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -16,9 +16,14 @@ all: data/openstreetmap.org data/openstreetmap.com data/openstreetmap.net \
 clean:
        rm -f data/* json/* origins/*
 
-update: all
+update: update_bytemark update_geodns
+
+update_bytemark: all
        bin/update
 
+update_geodns: all
+       parallel --will-cite rsync --quiet --recursive gdns/ {}::geodns ::: ${GEODNS_SERVERS}
+
 lib/countries.xml:
        curl -s -o $@ http://api.geonames.org/countryInfo?username=demo
 
@@ -56,7 +61,7 @@ origins/tile.openstreetmap.yml: bin/mkcountries lib/countries.xml bandwidth/tile
        bin/mkcountries bandwidth/tile.openstreetmap.yml origins/tile.openstreetmap.yml
 
 data/tile.openstreetmap.org json/tile.openstreetmap.org.json origins/render.openstreetmap.yml: bin/mkgeo origins/tile.openstreetmap.yml src/tile.openstreetmap
-       bin/mkgeo origins/tile.openstreetmap.yml src/tile.openstreetmap tile.openstreetmap.org origins/render.openstreetmap.yml
+       bin/mkgeo origins/tile.openstreetmap.yml src/tile.openstreetmap tile.openstreetmap.org origins/render.openstreetmap.yml tile
 
 data/render.openstreetmap.org json/render.openstreetmap.org.json: bin/mkgeo origins/render.openstreetmap.yml src/render.openstreetmap
        bin/mkgeo origins/render.openstreetmap.yml src/render.openstreetmap render.openstreetmap.org origins/total.openstreetmap.yml
index 1b9f87f..873fbf8 100755 (executable)
--- a/bin/mkgeo
+++ b/bin/mkgeo
@@ -15,6 +15,7 @@ my $zone = shift @ARGV;
 my $targetoriginfile = shift @ARGV;
 my $origins = YAML::LoadFile($originfile);
 my $clusters = YAML::LoadFile($clusterfile);
+my $gdnsname = shift @ARGV;
 my @servers;
 
 # Initialise cluster details
@@ -277,6 +278,61 @@ $jsonfile->print(encode_json(\@json));
 $jsonfile->close();
 $zonefile->close();
 
+# Output gdnsd configuration
+if (defined($gdnsname))
+{
+    my $gdnsmapfile = IO::File->new("> gdns/${gdnsname}.map") || die "$!";
+    my $gdnsresourcefile = IO::File->new("> gdns/${gdnsname}.resource") || die "$!";
+    my $continent = "";
+
+    $gdnsmapfile->print("${gdnsname} => {\n");
+    $gdnsmapfile->print("  geoip2_db => /var/lib/GeoIP/GeoLite2-Country.mmdb\n");
+    $gdnsmapfile->print("  datacenters => [" . join(",", sort(keys(%$clusters))) . "]\n");
+    $gdnsmapfile->print("  map => {\n");
+    $gdnsmapfile->print("    default => [" . join(",", sort(map { $_->{name} } grep { $_->{default} } values(%$clusters))) . "]\n");
+
+    foreach my $origin (sort { $a->{continent} cmp $b->{continent} || $a->{code} cmp $b->{code} } values %$origins)
+    {
+        my $code = $origin->{code};
+        my $cluster = $origin->{cluster}->{name};
+
+        next if $code eq "XK";
+
+        if ($continent ne $origin->{continent})
+        {
+            $gdnsmapfile->print("    }\n") if $continent;
+
+            $continent = $origin->{continent};
+
+            $gdnsmapfile->print("    ${continent} => {\n");
+        }
+
+        $gdnsmapfile->print("      ${code} => [${cluster}]\n");
+    }
+
+    $gdnsmapfile->print("    }\n") if $continent;
+
+    $gdnsmapfile->print("  }\n");
+    $gdnsmapfile->print("}\n");
+
+    $gdnsresourcefile->print("${gdnsname} => {\n");
+    $gdnsresourcefile->print("  map => ${gdnsname}\n");
+    $gdnsresourcefile->print("  dcmap => {\n");
+
+    foreach my $cluster (sort { $a->{name} cmp $b->{name} } values %$clusters)
+    {
+        my $name = $cluster->{name};
+
+        $gdnsresourcefile->print("    ${name} => ${name}.tile.openstreetmap.org.\n");
+    }
+
+    $gdnsresourcefile->print("  }\n");
+    $gdnsresourcefile->print("}\n");
+
+    $gdnsresourcefile->close();
+    $gdnsmapfile->close();
+}
+
 # Output the target details in origin format if required
 YAML::DumpFile($targetoriginfile, $targetorigins) if $targetoriginfile;
 
diff --git a/gdns/.gitkeep b/gdns/.gitkeep
new file mode 100644 (file)
index 0000000..e69de29