Add support for distributing gdnsd configuration via rsync
authorTom Hughes <tom@compton.nu>
Thu, 13 Jun 2019 15:59:25 +0000 (16:59 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 13 Jun 2019 16:07:48 +0000 (17:07 +0100)
cookbooks/dns/recipes/default.rb
cookbooks/dns/templates/default/dns-check.erb
cookbooks/dns/templates/default/dns-update.erb
cookbooks/geodns/recipes/default.rb
roles/geodns.rb

index a78d1d5..ddc0eb0 100644 (file)
 include_recipe "git"
 include_recipe "apache"
 
+geoservers = search(:node, "roles:geodns").collect(&:name).sort
+
 passwords = data_bag_item("dns", "passwords")
 
 package %w[
   make
+  parallel
+  rsync
   perl
   libxml-treebuilder-perl
   libxml-writer-perl
@@ -88,7 +92,7 @@ template "/usr/local/bin/dns-update" do
   owner "root"
   group "git"
   mode 0o750
-  variables :passwords => passwords
+  variables :passwords => passwords, :geoservers => geoservers
 end
 
 execute "dns-update" do
@@ -117,7 +121,7 @@ template "/usr/local/bin/dns-check" do
   owner "root"
   group "git"
   mode 0o750
-  variables :passwords => passwords
+  variables :passwords => passwords, :geoservers => geoservers
 end
 
 template "/etc/cron.d/dns" do
index eabf122..ca38ddd 100755 (executable)
@@ -1,9 +1,10 @@
 #!/bin/sh
 
-export RSYNC_PASSWORD=<%= @passwords["rsync"] %>
-export PINGDOM_USERNAME=pingdom@openstreetmap.org
-export PINGDOM_PASSWORD=<%= @passwords["pingdom"] %>
-export STATUSCAKE_USERNAME=OpenStreetMap
-export STATUSCAKE_APIKEY=<%= @passwords["statuscake"] %>
+export RSYNC_PASSWORD="<%= @passwords["rsync"] %>"
+export GEODNS_SERVERS="<%= @geoservers.join(" ") %>"
+export PINGDOM_USERNAME="pingdom@openstreetmap.org"
+export PINGDOM_PASSWORD="<%= @passwords["pingdom"] %>"
+export STATUSCAKE_USERNAME="OpenStreetMap"
+export STATUSCAKE_APIKEY="<%= @passwords["statuscake"] %>"
 
-make --quiet --directory=/var/lib/dns --assume-new=lib/countries.xml update > /dev/null
+make --quiet --jobs --directory=/var/lib/dns --assume-new=lib/countries.xml update > /dev/null
index 93d2e1e..401c5c7 100755 (executable)
@@ -4,11 +4,12 @@
 
 umask 0002
 
-export RSYNC_PASSWORD=<%= @passwords["rsync"] %>
-export PINGDOM_USERNAME=pingdom@openstreetmap.org
-export PINGDOM_PASSWORD=<%= @passwords["pingdom"] %>
-export STATUSCAKE_USERNAME=OpenStreetMap
-export STATUSCAKE_APIKEY=<%= @passwords["statuscake"] %>
+export RSYNC_PASSWORD="<%= @passwords["rsync"] %>"
+export GEODNS_SERVERS="<%= @geoservers.join(" ") %>"
+export PINGDOM_USERNAME="pingdom@openstreetmap.org"
+export PINGDOM_PASSWORD="<%= @passwords["pingdom"] %>"
+export STATUSCAKE_USERNAME="OpenStreetMap"
+export STATUSCAKE_APIKEY="<%= @passwords["statuscake"] %>"
 
 cd /var/lib/dns
 
@@ -19,4 +20,4 @@ fi
 
 git pull -q
 
-make update
+make --jobs update
index 0e20e2a..9f7c100 100644 (file)
@@ -29,6 +29,12 @@ execute "geoipdate" do
   not_if { ::File.exist?("/var/lib/GeoIP/GeoLite2-Country.mmdb") }
 end
 
+directory "/etc/gdnsd/config.d" do
+  owner "nobody"
+  group "nogroup"
+  mode 0o755
+end
+
 template "/etc/gdnsd/config" do
   source "config.erb"
   owner "root"
index 0d15107..a31437a 100644 (file)
@@ -1,6 +1,25 @@
 name "geodns"
 description "Role applied to all geographic DNS servers"
 
+default_attributes(
+  :rsyncd => {
+    :modules => {
+      :geodns => {
+        :comment => "GeoDNS",
+        :path => "/etc/gdnsd/config.d",
+        :read_only => false,
+        :write_only => true,
+        :list => false,
+        :transfer_logging => false,
+        :hosts_allow => [
+          "193.60.236.20" # sarel
+        ]
+      }
+    }
+  }
+)
+
 run_list(
+  "recipe[rsyncd]",
   "recipe[geodns]"
 )