summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--files/empty/.placeholder0
-rw-r--r--manifests/classes/bind-base.pp23
-rw-r--r--manifests/classes/bind-debian.pp5
-rw-r--r--manifests/classes/bind.pp6
-rw-r--r--manifests/definitions/bind-a.pp15
-rw-r--r--manifests/definitions/bind-aaaa.pp16
-rw-r--r--manifests/definitions/bind-cname.pp15
-rw-r--r--manifests/definitions/bind-mx.pp16
-rw-r--r--manifests/definitions/bind-ns.pp15
-rw-r--r--manifests/definitions/bind-record.pp14
-rw-r--r--manifests/definitions/bind-zone.pp58
-rw-r--r--manifests/init.pp2
-rw-r--r--templates/default-record.erb6
-rw-r--r--templates/mx-record.erb5
-rw-r--r--templates/zone-header.erb10
-rw-r--r--templates/zone-master.erb12
-rw-r--r--templates/zone-slave.erb7
17 files changed, 225 insertions, 0 deletions
diff --git a/files/empty/.placeholder b/files/empty/.placeholder
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/files/empty/.placeholder
diff --git a/manifests/classes/bind-base.pp b/manifests/classes/bind-base.pp
new file mode 100644
index 0000000..b31189e
--- /dev/null
+++ b/manifests/classes/bind-base.pp
@@ -0,0 +1,23 @@
+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",
+ }
+}
diff --git a/manifests/classes/bind-debian.pp b/manifests/classes/bind-debian.pp
new file mode 100644
index 0000000..f998a80
--- /dev/null
+++ b/manifests/classes/bind-debian.pp
@@ -0,0 +1,5 @@
+class bind::debian inherits bind::base {
+ Service["bind9"] {
+ pattern => "/usr/sbin/named",
+ }
+}
diff --git a/manifests/classes/bind.pp b/manifests/classes/bind.pp
new file mode 100644
index 0000000..dcede05
--- /dev/null
+++ b/manifests/classes/bind.pp
@@ -0,0 +1,6 @@
+class bind {
+ case $operatingsystem {
+ "Debian": { include bind::debian }
+ default: { fail "Unknown $operatingsystem" }
+ }
+}
diff --git a/manifests/definitions/bind-a.pp b/manifests/definitions/bind-a.pp
new file mode 100644
index 0000000..37153b8
--- /dev/null
+++ b/manifests/definitions/bind-a.pp
@@ -0,0 +1,15 @@
+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',
+ }
+}
diff --git a/manifests/definitions/bind-aaaa.pp b/manifests/definitions/bind-aaaa.pp
new file mode 100644
index 0000000..a20a58c
--- /dev/null
+++ b/manifests/definitions/bind-aaaa.pp
@@ -0,0 +1,16 @@
+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',
+ }
+
+}
diff --git a/manifests/definitions/bind-cname.pp b/manifests/definitions/bind-cname.pp
new file mode 100644
index 0000000..e166738
--- /dev/null
+++ b/manifests/definitions/bind-cname.pp
@@ -0,0 +1,15 @@
+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',
+ }
+}
diff --git a/manifests/definitions/bind-mx.pp b/manifests/definitions/bind-mx.pp
new file mode 100644
index 0000000..7eb63d0
--- /dev/null
+++ b/manifests/definitions/bind-mx.pp
@@ -0,0 +1,16 @@
+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],
+ }
+}
+
diff --git a/manifests/definitions/bind-ns.pp b/manifests/definitions/bind-ns.pp
new file mode 100644
index 0000000..9919f53
--- /dev/null
+++ b/manifests/definitions/bind-ns.pp
@@ -0,0 +1,15 @@
+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',
+ }
+}
diff --git a/manifests/definitions/bind-record.pp b/manifests/definitions/bind-record.pp
new file mode 100644
index 0000000..5e0cf6f
--- /dev/null
+++ b/manifests/definitions/bind-record.pp
@@ -0,0 +1,14 @@
+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"),
+ }
+}
diff --git a/manifests/definitions/bind-zone.pp b/manifests/definitions/bind-zone.pp
new file mode 100644
index 0000000..137bcd8
--- /dev/null
+++ b/manifests/definitions/bind-zone.pp
@@ -0,0 +1,58 @@
+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"),
+ }
+ }
+}
diff --git a/manifests/init.pp b/manifests/init.pp
new file mode 100644
index 0000000..6cc1969
--- /dev/null
+++ b/manifests/init.pp
@@ -0,0 +1,2 @@
+import "classes/*.pp"
+import "definitions/*.pp"
diff --git a/templates/default-record.erb b/templates/default-record.erb
new file mode 100644
index 0000000..64aa056
--- /dev/null
+++ b/templates/default-record.erb
@@ -0,0 +1,6 @@
+<% if ttl -%>
+<%=owner%> <%=ttl%> <%=record_class%> <%=record_type%> <%=host%>
+<% else -%>
+<%=owner%> <%=record_class%> <%=record_type%> <%=host%>
+<% end -%>
+
diff --git a/templates/mx-record.erb b/templates/mx-record.erb
new file mode 100644
index 0000000..a8ec89d
--- /dev/null
+++ b/templates/mx-record.erb
@@ -0,0 +1,5 @@
+<% if ttl -%>
+<%=owner%> <%=ttl%> IN MX <%=priority%> <%=host%>
+<% else -%>
+<%=owner%> IN MX <%=priority%> <%=host%>
+<% end -%>
diff --git a/templates/zone-header.erb b/templates/zone-header.erb
new file mode 100644
index 0000000..da93b31
--- /dev/null
+++ b/templates/zone-header.erb
@@ -0,0 +1,10 @@
+; 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%>.
+
diff --git a/templates/zone-master.erb b/templates/zone-master.erb
new file mode 100644
index 0000000..d9e88fd
--- /dev/null
+++ b/templates/zone-master.erb
@@ -0,0 +1,12 @@
+# 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;
+};
diff --git a/templates/zone-slave.erb b/templates/zone-slave.erb
new file mode 100644
index 0000000..02364c1
--- /dev/null
+++ b/templates/zone-slave.erb
@@ -0,0 +1,7 @@
+# File managed by puppet
+zone <%=name%> IN {
+ type slave;
+ masters { <%= masters.collect! {|i| "#{i}" }.join('; ') -%> };
+ allow-query { any; };
+ notify yes;
+}