Added support for DNS views into dns::server and dns::zone.

This commit is contained in:
Timo Mkinen 2012-04-24 14:43:55 +03:00
parent 7083f00454
commit 48ded3a8e7
2 changed files with 93 additions and 42 deletions

View file

@ -233,18 +233,24 @@ class dns::server::ldap inherits dns::server {
# #
define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO") { 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 { case $role {
"master": { "master": {
case $operatingsystem { case $operatingsystem {
"openbsd": { "openbsd": {
$zonedir = "/master" $zonedir = "/master/${view}"
} }
"fedora","centos": { "fedora","centos": {
$zonedir = "/var/named" $zonedir = "/var/named/${view}"
} }
"ubuntu": { "ubuntu": {
$zonedir = "/etc/bind" $zonedir = "/etc/bind/${view}"
} }
} }
} }
@ -254,13 +260,13 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO")
} }
case $operatingsystem { case $operatingsystem {
"openbsd": { "openbsd": {
$zonedir = "/slave" $zonedir = "/slave/${view}"
} }
"fedora","centos": { "fedora","centos": {
$zonedir = "/var/named/slaves" $zonedir = "/var/named/slaves/${view}"
} }
"ubuntu": { "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, '\/', '-') if $view != "" {
file { "${dns::server::chroot}${dns::server::confdir}/zone.${zonefile}": 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, ensure => present,
content => template("dns/zone.$role.erb"), content => template("dns/zone.$role.erb"),
mode => "0640", mode => "0640",
@ -285,7 +311,7 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO")
if $role == "master" and $zone != "." { if $role == "master" and $zone != "." {
if $source != "AUTO" { if $source != "AUTO" {
file { "${dns::server::chroot}${zonedir}/db.${zonefile}": file { "${dns::server::chroot}${zonedir}db.${zone}":
ensure => present, ensure => present,
source => $source, source => $source,
mode => "0640", mode => "0640",
@ -298,7 +324,7 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO")
notify => Exec["generate-named-conf"], notify => Exec["generate-named-conf"],
} }
} else { } else {
file { "${dns::server::chroot}${zonedir}/db.${zonefile}": file { "${dns::server::chroot}${zonedir}/db.${zone}":
ensure => present, ensure => present,
content => template("dns/db.erb"), content => template("dns/db.erb"),
mode => "0640", mode => "0640",
@ -310,10 +336,12 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO")
}, },
notify => Service["named"], notify => Service["named"],
} }
file { "${dns::server::chroot}${zonedir}/db.${zonefile}-dynamic": file { "${dns::server::chroot}${zonedir}/db.${zone}-dynamic":
ensure => present, ensure => present,
source => [ "puppet:///files/dns/db.${zonefile}-dynamic.${homename}", source => [
"puppet:///modules/dns/empty", ], "puppet:///files/dns/db.${zone}-dynamic.${homename}",
"puppet:///modules/dns/empty",
],
mode => "0640", mode => "0640",
owner => "root", owner => "root",
group => $dns::server::group, group => $dns::server::group,
@ -323,10 +351,12 @@ define dns::zone($role = "master", $master = "", $slaves = [], $source = "AUTO")
}, },
notify => Service["named"], notify => Service["named"],
} }
file { "${dns::server::chroot}${zonedir}/db.${zonefile}-static": file { "${dns::server::chroot}${zonedir}/db.${zone}-static":
ensure => present, ensure => present,
source => [ "puppet:///files/dns/db.${zonefile}-static.${homename}", source => [
"puppet:///modules/dns/empty", ], "puppet:///files/dns/db.${zone}-static.${homename}",
"puppet:///modules/dns/empty",
],
mode => "0640", mode => "0640",
owner => "root", owner => "root",
group => $dns::server::group, group => $dns::server::group,

View file

@ -4,21 +4,25 @@ chroot="<%= chroot %>"
confdir="<%= confdir %>" confdir="<%= confdir %>"
operatingsystem="<%= operatingsystem %>" operatingsystem="<%= operatingsystem %>"
cat <<EOF function printview {
include "${confdir}/named.conf.local"; view=$1
include "${confdir}/named.conf.options"; case $view in
default)
viewdir="${confdir}"
acl="any"
;;
*)
viewdir="${confdir}/${view}"
acl="${view}"
;;
esac
view default { echo "view ${view} {"
match-clients { any; }; echo " match-clients { ${acl}; };"
EOF
for name in ${chroot}${confdir}/zone.* ; do case $operatingsystem in
echo " include \"${confdir}/`basename ${name}`\";" OpenBSD)
done cat <<EOF
case $operatingsystem in
OpenBSD)
cat <<EOF
zone "." { zone "." {
type hint; type hint;
file "/etc/root.hint"; file "/etc/root.hint";
@ -36,12 +40,12 @@ case $operatingsystem in
file "/standard/loopback6.arpa"; file "/standard/loopback6.arpa";
}; };
EOF EOF
;; ;;
Ubuntu) Ubuntu)
echo " include \"${confdir}/named.conf.default-zones\";" echo " include \"${confdir}/named.conf.default-zones\";"
;; ;;
*) *)
cat <<EOF cat <<EOF
zone "." { zone "." {
type hint; type hint;
@ -49,10 +53,27 @@ EOF
}; };
EOF EOF
cat ${chroot}/etc/named.rfc1912.zones | \ cat ${chroot}/etc/named.rfc1912.zones | \
sed -e 's%file "%file "/var/named/%' -e 's/^/ /' sed -e 's%file "%file "/var/named/%' -e 's/^/ /'
;; ;;
esac esac
echo "};" for name in ${chroot}${viewdir}/zone.* ; do
echo "" echo " include \"${viewdir}/`basename ${name}`\";"
done
echo "};"
echo ""
}
cat <<EOF
include "${confdir}/named.conf.local";
include "${confdir}/named.conf.options";
EOF
for name in ${chroot}/${confdir}/* ; do
[ -d ${name} ] || continue
printview `basename ${name}`
done
printview default