diff --git a/dns/manifests/init.pp b/dns/manifests/init.pp index ee3ec43..8e63fa0 100644 --- a/dns/manifests/init.pp +++ b/dns/manifests/init.pp @@ -233,18 +233,24 @@ class dns::server::ldap inherits dns::server { # define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") { - $zone = $name + $tmpname = regsubst($name, '([^/]+/)?([0-9]+)/([0-9\.]+\.in-addr\.arpa)', '\1\2-\3') + case dirname($tmpname) { + ".": { $view = "" } + default: { $view = regsubst(dirname($tmpname), "^(.*)", "\1/") } + } + $zone = basename($tmpname) + case $role { "master": { case $operatingsystem { "openbsd": { - $zonedir = "/master" + $zonedir = "/master/${view}" } "fedora","centos": { - $zonedir = "/var/named" + $zonedir = "/var/named/${view}" } "ubuntu": { - $zonedir = "/etc/bind" + $zonedir = "/etc/bind/${view}" } } } @@ -254,13 +260,13 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") } case $operatingsystem { "openbsd": { - $zonedir = "/slave" + $zonedir = "/slave/${view}" } "fedora","centos": { - $zonedir = "/var/named/slaves" + $zonedir = "/var/named/slaves/${view}" } "ubuntu": { - $zonedir = "/var/cache/bind" + $zonedir = "/var/cache/bind/${view}" } } } @@ -269,8 +275,28 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") } } - $zonefile = regsubst($zone, '\/', '-') - file { "${dns::server::chroot}${dns::server::confdir}/zone.${zonefile}": + if $view != "" { + if !defined(File["${dns::server::chroot}${dns::server::confdir}/${view}"]) { + file { "${dns::server::chroot}${dns::server::confdir}/${view}": + ensure => directory, + mode => "0750", + owner => "root", + group => $dns::server::group, + before => File["${dns::server::chroot}${dns::server::confdir}/${view}zone.${zone}"], + } + } + if !defined(File["${dns::server::chroot}${zonedir}"]) { + file { "${dns::server::chroot}${zonedir}": + ensure => directory, + mode => "0750", + owner => "root", + group => $dns::server::group, + before => File["${dns::server::chroot}${zonedir}db.${zone}"], + } + } + } + + file { "${dns::server::chroot}${dns::server::confdir}/${view}zone.${zone}": ensure => present, content => template("dns/zone.$role.erb"), mode => "0640", @@ -285,7 +311,7 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") if $role == "master" and $zone != "." { if $source != "AUTO" { - file { "${dns::server::chroot}${zonedir}/db.${zonefile}": + file { "${dns::server::chroot}${zonedir}db.${zone}": ensure => present, source => $source, mode => "0640", @@ -298,7 +324,7 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") notify => Exec["generate-named-conf"], } } else { - file { "${dns::server::chroot}${zonedir}/db.${zonefile}": + file { "${dns::server::chroot}${zonedir}/db.${zone}": ensure => present, content => template("dns/db.erb"), mode => "0640", @@ -310,10 +336,12 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") }, notify => Service["named"], } - file { "${dns::server::chroot}${zonedir}/db.${zonefile}-dynamic": + file { "${dns::server::chroot}${zonedir}/db.${zone}-dynamic": ensure => present, - source => [ "puppet:///files/dns/db.${zonefile}-dynamic.${homename}", - "puppet:///modules/dns/empty", ], + source => [ + "puppet:///files/dns/db.${zone}-dynamic.${homename}", + "puppet:///modules/dns/empty", + ], mode => "0640", owner => "root", group => $dns::server::group, @@ -323,10 +351,12 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") }, notify => Service["named"], } - file { "${dns::server::chroot}${zonedir}/db.${zonefile}-static": + file { "${dns::server::chroot}${zonedir}/db.${zone}-static": ensure => present, - source => [ "puppet:///files/dns/db.${zonefile}-static.${homename}", - "puppet:///modules/dns/empty", ], + source => [ + "puppet:///files/dns/db.${zone}-static.${homename}", + "puppet:///modules/dns/empty", + ], mode => "0640", owner => "root", group => $dns::server::group, diff --git a/dns/templates/generate-named-conf.sh.erb b/dns/templates/generate-named-conf.sh.erb index 53daf33..4d5107a 100644 --- a/dns/templates/generate-named-conf.sh.erb +++ b/dns/templates/generate-named-conf.sh.erb @@ -4,21 +4,25 @@ chroot="<%= chroot %>" confdir="<%= confdir %>" operatingsystem="<%= operatingsystem %>" -cat <