Doc will be added later.
--- /dev/null
+class bind::base {
+ package {"bind9":
+ ensure => present,
+ }
+
+ service {"bind9":
+ ensure => running,
+ enable => true,
+ require => Package["bind9"],
+ }
+
+ file {["/etc/bind/pri", "/etc/bind/zones"]:
+ ensure => directory,
+ owner => root,
+ group => root,
+ mode => 0755,
+ require => Package["bind9"],
+ purge => true,
+ force => true,
+ recurse => true,
+ source => "puppet:///modules/bind/empty",
+ }
+}
--- /dev/null
+class bind::debian inherits bind::base {
+ Service["bind9"] {
+ pattern => "/usr/sbin/named",
+ }
+}
--- /dev/null
+class bind {
+ case $operatingsystem {
+ "Debian": { include bind::debian }
+ default: { fail "Unknown $operatingsystem" }
+ }
+}
--- /dev/null
+define bind::a($ensure=present,
+ $zone,
+ $owner,
+ $host,
+ $ttl=false) {
+
+ bind::record {$name:
+ ensure => $ensure,
+ zone => $zone,
+ owner => $owner,
+ host => $host,
+ ttl => $ttl,
+ record_type => 'A',
+ }
+}
--- /dev/null
+define bind::aaaa($ensure=present,
+ $zone,
+ $owner,
+ $host,
+ $ttl=false) {
+
+ bind::record {$name:
+ ensure => $ensure,
+ zone => $zone,
+ owner => $owner,
+ host => $host,
+ ttl => $ttl,
+ record_type => 'AAAA',
+ }
+
+}
--- /dev/null
+define bind::cname($ensure=present,
+ $zone,
+ $owner,
+ $host,
+ $ttl=false) {
+
+ bind::record {$name:
+ ensure => $ensure,
+ zone => $zone,
+ owner => $owner,
+ host => $host,
+ ttl => $ttl,
+ record_type => 'CNAME',
+ }
+}
--- /dev/null
+define bind::mx($ensure=present,
+ $zone,
+ $owner,
+ $priority,
+ $host,
+ $ttl=false) {
+
+ common::concatfilepart{"bind.${name}":
+ file => "/etc/bind/pri/${zone}",
+ ensure => $ensure,
+ notify => Service["bind9"],
+ content => template("bind/mx-record.erb"),
+ require => Bind::Zone[$zone],
+ }
+}
+
--- /dev/null
+define bind::ns($ensure=present,
+ $zone,
+ $owner,
+ $host,
+ $ttl=false) {
+
+ bind::record {$name:
+ ensure => $ensure,
+ zone => $zone,
+ owner => $owner,
+ host => $host,
+ ttl => $ttl,
+ record_type => 'NS',
+ }
+}
--- /dev/null
+define bind::record($ensure=present,
+ $zone,
+ $owner,
+ $host,
+ $record_type,
+ $record_class='IN',
+ $ttl=false) {
+
+ common::concatfilepart {"${zone}.${record_type}.${name}":
+ ensure => $ensure,
+ file => "/etc/bind/pri/${zone}.conf",
+ content => template("bind/default-record.erb"),
+ }
+}
--- /dev/null
+define bind::zone($ensure=present,
+ $is_slave=false,
+ $zone_ttl=false,
+ $zone_contact=false,
+ $zone_serial=false,
+ $zone_refresh="3h",
+ $zone_retry="1h",
+ $zone_expiracy="1w",
+ $zone_ns=false,
+ $zone_xfers=false,
+ $zone_masters=false) {
+
+ common::concatfilepart {"bind.zones.${name}":
+ ensure => $ensure,
+ notify => Service["bind9"],
+ file => "/etc/bind/zones/${name}.conf",
+ }
+
+ common::concatfilepart {"named.local.zone.${name}":
+ ensure => $ensure,
+ notify => Service["bind9"],
+ file => "/etc/bind/named.conf.local",
+ content => "include \"/etc/bind/zones/${name}.conf\";\n",
+ }
+
+ if $is_slave {
+ if !$zone_masters {
+ fail "No master defined for ${name}!"
+ }
+ Common::Concatfilepart["bind.zones.${name}"] {
+ content => template("bind/zone-slave.erb"),
+ }
+## END of slave
+ } else {
+ if !$zone_contact {
+ fail "No contact defined for ${name}!"
+ }
+ if !$zone_ns {
+ fail "No ns defined for ${name}!"
+ }
+ if !$zone_serial {
+ fail "No serial defined for ${name}!"
+ }
+ if !$zone_ttl {
+ fail "No ttl defined for ${name}!"
+ }
+
+ Common::Concatfilepart["bind.zones.${name}"] {
+ content => template("bind/zone-master.erb"),
+ }
+
+ common::concatfilepart {"bind.00.${name}":
+ ensure => $ensure,
+ file => "/etc/bind/pri/${name}.conf",
+ content => template("bind/zone-header.erb"),
+ }
+ }
+}
--- /dev/null
+import "classes/*.pp"
+import "definitions/*.pp"
--- /dev/null
+<% if ttl -%>
+<%=owner%> <%=ttl%> <%=record_class%> <%=record_type%> <%=host%>
+<% else -%>
+<%=owner%> <%=record_class%> <%=record_type%> <%=host%>
+<% end -%>
+
--- /dev/null
+<% if ttl -%>
+<%=owner%> <%=ttl%> IN MX <%=priority%> <%=host%>
+<% else -%>
+<%=owner%> IN MX <%=priority%> <%=host%>
+<% end -%>
--- /dev/null
+; File managed by puppet
+$TTL <%=zone_ttl%>
+@ IN SOA <%=name%>. <%=zone_contact%>. (
+ <%=zone_serial%> ; serial
+ <%=zone_refresh%> ; refresh
+ <%=zone_retry%> ; retry
+ <%=zone_expiracy%>; expiracy
+ <%=zone_ttl%> ) ; TTL
+ IN NS <%=zone_ns%>.
+
--- /dev/null
+# File managed by puppet
+zone "<%=name%>" IN {
+ type master;
+ file "/etc/bind/pri/<%=name%>.conf";
+<% if zone_xfers and not zone_xfers.empty? -%>
+ allow-transfer { <%= zone_xfers.collect! {|i| "#{i}" }.join('; ') -%> };
+<% else -%>
+ allow-transfer { none; };
+<% end -%>
+ allow-query { any; };
+ notify yes;
+};
--- /dev/null
+# File managed by puppet
+zone <%=name%> IN {
+ type slave;
+ masters { <%= masters.collect! {|i| "#{i}" }.join('; ') -%> };
+ allow-query { any; };
+ notify yes;
+}