From f72325de3063b3f05f32c05077cc94c06f80610f Mon Sep 17 00:00:00 2001 From: Ossi Salmi Date: Sun, 18 Nov 2012 22:03:01 +0200 Subject: [PATCH] Added support for generating dns records for puppet nodes --- dns/manifests/init.pp | 73 ++++++++++++++++++++++-- dns/templates/generate-named-conf.sh.erb | 10 +++- 2 files changed, 78 insertions(+), 5 deletions(-) diff --git a/dns/manifests/init.pp b/dns/manifests/init.pp index fda2a08..fc9611c 100644 --- a/dns/manifests/init.pp +++ b/dns/manifests/init.pp @@ -391,12 +391,9 @@ define dns::zone($role = "master", $master = "", $slaves = [], $forwarders = [], }, notify => Service["named"], } + file { "${dns::server::chroot}${zonedir}/db.${zone}-dynamic": ensure => present, - source => [ - "puppet:///files/dns/db.${zone}-dynamic.${homename}", - "puppet:///modules/dns/empty", - ], mode => "0640", owner => "root", group => $dns::server::group, @@ -406,6 +403,22 @@ define dns::zone($role = "master", $master = "", $slaves = [], $forwarders = [], }, notify => Service["named"], } + file { "${dns::server::chroot}${zonedir}/db.${zone}-dynamic.d": + ensure => directory, + mode => "0640", + owner => "root", + group => $dns::server::group, + require => $::operatingsystem ? { + "openbsd" => undef, + default => Package["bind"], + }, + purge => true, + force => true, + recurse => true, + source => "puppet:///modules/custom/empty", + notify => Service["named"], + } + file { "${dns::server::chroot}${zonedir}/db.${zone}-static": ensure => present, source => [ @@ -421,12 +434,64 @@ define dns::zone($role = "master", $master = "", $slaves = [], $forwarders = [], }, notify => Service["named"], } + + exec { "update-db.${zone}-dynamic": + path => "/bin:/usr/bin:/sbin:/usr/sbin", + command => "/bin/sh -c 'find db.${zone}-dynamic.d -name rr.\\* | xargs cat > db.${zone}-dynamic'", + cwd => "${dns::server::chroot}${zonedir}", + user => "root", + refreshonly => true, + notify => Service["named"], + } + + Dns::Node::Record <<| tag == $zone |>> { + dbdir => "${dns::server::chroot}${zonedir}/db.${zone}-dynamic.d", + notify => Exec["update-db.${zone}-dynamic"], + require => File["${dns::server::chroot}${zonedir}/db.${zone}-dynamic", + "${dns::server::chroot}${zonedir}/db.${zone}-dynamic.d"], + } } } } +class dns::node { + + if !$dns_node_name { + $dns_node_name = $::hostname + } + if !$dns_node_ipaddr { + $dns_node_ipaddr = $::ipaddress + } + if !$dns_node_zone { + $dns_node_zone = $::domain + } + + if $dns_node_alias { + $dns_node_cname = inline_template("<% dns_node_alias.each do |a| -%><%= a %>\tCNAME\t<%= dns_node_name %>\n<% end -%>") + } + + @@dns::node::record { "${dns_node_name}.${dns_node_zone}": + name => $dns_node_name, + cname => $dns_node_cname, + ipaddr => $dns_node_ipaddr, + tag => $dns_node_zone + } + +} + + +define dns::node::record($dbdir, $ipaddr, $name, $cname="") { + + file { "${dbdir}/rr.${name}": + ensure => present, + content => "${name}\tA\t${ipaddr}\n${cname}", + } + +} + + # Install dynamic DNS update script # # === Global variables diff --git a/dns/templates/generate-named-conf.sh.erb b/dns/templates/generate-named-conf.sh.erb index 4dd8a37..57203e2 100644 --- a/dns/templates/generate-named-conf.sh.erb +++ b/dns/templates/generate-named-conf.sh.erb @@ -75,6 +75,14 @@ EOF for name in ${chroot}/${confdir}/* ; do [ -d ${name} ] || continue - printview `basename ${name}` + name=`basename ${name}` + case ${name} in + db.*) + continue + ;; + *) + printview ${name} + ;; + esac done printview default