From 6f309391fe1cd4fc9126716e7a676ed12635192f Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Thu, 13 Jun 2019 17:19:30 +0100 Subject: [PATCH] Add support for generating and distributing gdnsd maps and resources --- .gitignore | 1 + Makefile | 9 +++++++-- bin/mkgeo | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ gdns/.gitkeep | 0 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 gdns/.gitkeep diff --git a/.gitignore b/.gitignore index 2f82292..02a0651 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ data/ +gdns/ json/ kml/ origins/ diff --git a/Makefile b/Makefile index 3cdf57f..4cc2d7c 100644 --- 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 diff --git a/bin/mkgeo b/bin/mkgeo index 1b9f87f..873fbf8 100755 --- 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 index 0000000..e69de29 -- 2.39.5