define bind::zone ($masterip = "", $comment = "", $alsonotify = "", $allowtransfer = "", $ensure = "present", $type) {
if $type == "master" {
concat_snippet{"${name}_zone_config":
content => template("bind/master_zone_config.erb"),
directory => "/etc/named.conf.d",
ensure => $ensure
}
file{"/srv/named/master/${name}":
owner => root,
group => root,
require => Class["bind::master::config"],
source => "puppet://puppet/bind/zones/${name}",
notify => Service["named"],
ensure => $ensure
}
} else {
concat_snippet{"${name}_zone_config":
content => template("bind/slave_zone_config.erb"),
directory => "/etc/named.conf.d",
notify => Service["named"],
ensure => $ensure
}
}
}
class bind::master::config {
concat_file{"/etc/named.conf":
owner => root,
group => root,
require => Class["bind::install"],
notify => Service["named"],
}
concat_snippet{"named.conf_acl":
order => 00,
directory => "/etc/named.conf.d",
source => "puppet://puppet/bind/master/named.conf_acl",
}
concat_snippet{"named.conf":
order => 01,
directory => "/etc/named.conf.d",
source => "puppet://puppet/bind/master/named.conf_header",
}
}
class bind::zones {
if defined(Class["bind::master"]) {
$zone_type = "master"
} else {
$zone_type = "slave"
}
Bind::Zone{
masterip => "1.2.3.4",
type => $zone_type,
}
bind::zone{"one.com"]:
alsonotify => ["4.3.2.1"];
"two.com":
;
"three.com":
comment => "Belongs to Acme inc.";
}
}