diff options
| author | Silvio Rhatto <rhatto@riseup.net> | 2013-01-20 21:24:54 -0200 | 
|---|---|---|
| committer | Silvio Rhatto <rhatto@riseup.net> | 2013-01-20 21:24:54 -0200 | 
| commit | 3d9feb7f47151c9b828a5ff2e74d2f0d97ebab01 (patch) | |
| tree | df97fe71507fd9eeed3deb08b87f41a503e75bbe | |
| parent | 999e4e426996f3169b0a8f647eee8e8ab4ec8c33 (diff) | |
| parent | 88a39666e5b0ddf668baf93c111b549628f79704 (diff) | |
| download | puppet-bind-3d9feb7f47151c9b828a5ff2e74d2f0d97ebab01.tar.gz puppet-bind-3d9feb7f47151c9b828a5ff2e74d2f0d97ebab01.tar.bz2  | |
Merge branch 'master' of https://github.com/camptocamp/puppet-bind
Conflicts:
	manifests/definitions/bind-mx.pp
| -rw-r--r-- | files/empty/.placeholder | 0 | ||||
| -rw-r--r-- | manifests/a.pp | 43 | ||||
| -rw-r--r-- | manifests/aaaa.pp | 28 | ||||
| -rw-r--r-- | manifests/base.pp | 39 | ||||
| -rw-r--r-- | manifests/classes/bind-base.pp | 32 | ||||
| -rw-r--r-- | manifests/classes/bind-debian.pp | 14 | ||||
| -rw-r--r-- | manifests/classes/bind.pp | 54 | ||||
| -rw-r--r-- | manifests/cname.pp | 28 | ||||
| -rw-r--r-- | manifests/debian.pp | 13 | ||||
| -rw-r--r-- | manifests/definitions/bind-a.pp | 27 | ||||
| -rw-r--r-- | manifests/definitions/bind-aaaa.pp | 28 | ||||
| -rw-r--r-- | manifests/definitions/bind-cname.pp | 27 | ||||
| -rw-r--r-- | manifests/definitions/bind-mx.pp | 34 | ||||
| -rw-r--r-- | manifests/definitions/bind-ns.pp | 27 | ||||
| -rw-r--r-- | manifests/definitions/bind-record.pp | 35 | ||||
| -rw-r--r-- | manifests/definitions/bind-zone.pp | 88 | ||||
| -rw-r--r-- | manifests/generate.pp | 87 | ||||
| -rw-r--r-- | manifests/init.pp | 55 | ||||
| -rw-r--r-- | manifests/mx.pp | 34 | ||||
| -rw-r--r-- | manifests/ns.pp | 28 | ||||
| -rw-r--r-- | manifests/ptr.pp | 28 | ||||
| -rw-r--r-- | manifests/record.pp | 36 | ||||
| -rw-r--r-- | manifests/txt.pp | 28 | ||||
| -rw-r--r-- | manifests/zone.pp | 116 | ||||
| -rw-r--r-- | templates/generate.erb | 1 | ||||
| -rw-r--r-- | templates/zone-header.erb | 3 | ||||
| -rw-r--r-- | templates/zone-slave.erb | 3 | 
27 files changed, 566 insertions, 370 deletions
diff --git a/files/empty/.placeholder b/files/empty/.placeholder deleted file mode 100644 index e69de29..0000000 --- a/files/empty/.placeholder +++ /dev/null diff --git a/manifests/a.pp b/manifests/a.pp new file mode 100644 index 0000000..d457413 --- /dev/null +++ b/manifests/a.pp @@ -0,0 +1,43 @@ +# = Definition: bind::a +# +# Creates an IPv4 record. +# +# Arguments: +# *$zone*:  Bind::Zone name +# *$owner*: owner of the Resource Record +# *$host*:  target of the Resource Record +# *$ttl*:   Time to Live for the Resource Record. Optional. +# *$ptr*:   create the corresponding ptr record (default=false) +# +# +define bind::a( +  $zone, +  $host, +  $ensure = present, +  $owner  = false, +  $ttl    = false, +  $ptr    = false +) { + +  bind::record {$name: +    ensure      => $ensure, +    zone        => $zone, +    owner       => $owner, +    host        => $host, +    ttl         => $ttl, +    record_type => 'A', +  } + +  if $ptr { +    $arpa      = inline_template("<%= require 'ipaddr'; IPAddr.new(host).reverse %>") +    $arpa_zone = inline_template("<%= require 'ipaddr'; IPAddr.new(host).reverse.split('.')[1..-1].join('.') %>") + +    bind::ptr {"${arpa}.": +      ensure => $ensure, +      zone   => $arpa_zone, +      host   => $name, +      ttl    => $ttl, +    } +  } + +} diff --git a/manifests/aaaa.pp b/manifests/aaaa.pp new file mode 100644 index 0000000..9466d0f --- /dev/null +++ b/manifests/aaaa.pp @@ -0,0 +1,28 @@ +# = Definition: bind::aaaa +# +# Creates an IPv6 AAAA record. +# +# Arguments: +#  *$zone*:  Bind::Zone name +#  *$owner*: owner of the Resource Record +#  *$host*:  target of the Resource Record +#  *$ttl*:   Time to Live for the Resource Record. Optional. +# +define bind::aaaa ( +  $zone, +  $host, +  $ensure = present, +  $owner  = false, +  $ttl    = false +) { + +  bind::record {$name: +    ensure      => $ensure, +    zone        => $zone, +    owner       => $owner, +    host        => $host, +    ttl         => $ttl, +    record_type => 'AAAA', +  } + +} diff --git a/manifests/base.pp b/manifests/base.pp new file mode 100644 index 0000000..369100a --- /dev/null +++ b/manifests/base.pp @@ -0,0 +1,39 @@ +# = Class: bind::base +# +# Declares some basic resources. +# You should NOT include this class as is, as it won't work at all! +# Please refer to Class['bind']. +# +class bind::base { + +  include concat::setup + +  concat {'/etc/bind/named.conf.local': +    owner => root, +    group => root, +    mode  => '0644', +    force => true, +  } + +  package {'bind9': +    ensure => present, +  } + +  service {'bind9': +    ensure  => running, +    enable  => true, +    require => Package['bind9'], +  } + +  file {'/etc/bind/zones': +    ensure  => directory, +    owner   => root, +    group   => root, +    mode    => '0755', +    purge   => true, +    force   => true, +    recurse => true, +    require => Package['bind9'], +  } + +} diff --git a/manifests/classes/bind-base.pp b/manifests/classes/bind-base.pp deleted file mode 100644 index c442085..0000000 --- a/manifests/classes/bind-base.pp +++ /dev/null @@ -1,32 +0,0 @@ -/* - -= Class: bind::base - -Declares some basic resources. -You should NOT include this class as is, as it won't work at all! -Please refer to Class["bind"]. - -*/ -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 deleted file mode 100644 index 7b752ae..0000000 --- a/manifests/classes/bind-debian.pp +++ /dev/null @@ -1,14 +0,0 @@ -/* - -= Class: bind::debian -Special debian class - inherits from bind::base - -You should not include this class - please refer to Class["bind"] - -*/ -class bind::debian inherits bind::base { -  Service["bind9"] { -    pattern => "/usr/sbin/named", -    restart => "/etc/init.d/bind9 reload", -  } -} diff --git a/manifests/classes/bind.pp b/manifests/classes/bind.pp deleted file mode 100644 index d9af708..0000000 --- a/manifests/classes/bind.pp +++ /dev/null @@ -1,54 +0,0 @@ -/* - -= Class: bind -Include this class to install bind9 server on your node. - -Requires: -- module common (git://github.com/camptocamp/puppet-common.git) - -Bind documentation: -http://www.bind9.net/manuals - -Limitations: -This modules is valid for Bind 9.7.1 (squeeze version). -For 9.7.2, it will be really limited (no view nor ACL support). - - -Example: - -node "ns1.domain.ltd" { -  include bind -  bind::zone {"domain.ltd": -    ensure => present, -    zone_contact => "contact.domain.ltd", -    zone_ns      => $fqdn, -    zone_serial  => "2010110804", -    zone_ttl     => "604800", -  } - -  bind::a {"ns $fqdn": -    zone  => "domain.ltd", -    owner => "${fqdn}.", -    host  => $ipaddress, -  } - -  bind::a {"mail.domain.ltd": -    zone  => "domain.ltd", -    owner => "mail", -    host  => "6.6.6.6", -  } - -  bind::mx {"mx1": -    zone     => "domain.ltd", -    owner    => "@", -    priority => 1, -    host     => "mail.domain.ltd", -  } -} -*/ -class bind { -  case $operatingsystem { -    "Debian","Ubuntu": { include bind::debian } -    default: { fail "Unknown $operatingsystem" } -  } -} diff --git a/manifests/cname.pp b/manifests/cname.pp new file mode 100644 index 0000000..f8eca40 --- /dev/null +++ b/manifests/cname.pp @@ -0,0 +1,28 @@ +# = Definition: bind::cname +# +# Creates a CNAME record. +# +# Arguments: +#  *$zone*:  Bind::Zone name +#  *$owner*: owner of the Resource Record +#  *$host*:  target of the Resource Record +#  *$ttl*:   Time to Live for the Resource Record. Optional. +# +define bind::cname ( +  $zone, +  $host, +  $ensure = present, +  $owner  = false, +  $ttl    = false +) { + +  bind::record {$name: +    ensure      => $ensure, +    zone        => $zone, +    owner       => $owner, +    host        => $host, +    ttl         => $ttl, +    record_type => 'CNAME', +  } + +} diff --git a/manifests/debian.pp b/manifests/debian.pp new file mode 100644 index 0000000..41e356e --- /dev/null +++ b/manifests/debian.pp @@ -0,0 +1,13 @@ +# = Class: bind::debian +# Special debian class - inherits from bind::base +# +# You should not include this class - please refer to Class["bind"] +# +class bind::debian inherits bind::base { + +  Service['bind9'] { +    pattern => '/usr/sbin/named', +    restart => '/etc/init.d/bind9 reload', +  } + +} diff --git a/manifests/definitions/bind-a.pp b/manifests/definitions/bind-a.pp deleted file mode 100644 index 3f30187..0000000 --- a/manifests/definitions/bind-a.pp +++ /dev/null @@ -1,27 +0,0 @@ -/* - -= Definition: bind::a -Creates an IPv4 record. - -Arguments: - *$zone*:  Bind::Zone name - *$owner*: owner of the Resource Record - *$host*:  target of the Resource Record - *$ttl*:   Time to Live for the Resource Record. Optional. - -*/ -define bind::a($ensure=present, -    $zone, -    $owner=false, -    $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 deleted file mode 100644 index 80291c2..0000000 --- a/manifests/definitions/bind-aaaa.pp +++ /dev/null @@ -1,28 +0,0 @@ -/* - -= Definition: bind::aaaa -Creates an IPv6 AAAA record. - -Arguments: - *$zone*:  Bind::Zone name - *$owner*: owner of the Resource Record - *$host*:  target of the Resource Record - *$ttl*:   Time to Live for the Resource Record. Optional. - -*/ -define bind::aaaa($ensure=present, -    $zone, -    $owner=false, -    $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 deleted file mode 100644 index c8baeec..0000000 --- a/manifests/definitions/bind-cname.pp +++ /dev/null @@ -1,27 +0,0 @@ -/* - -= Definition: bind::cname -Creates a CNAME record. - -Arguments: - *$zone*:  Bind::Zone name - *$owner*: owner of the Resource Record - *$host*:  target of the Resource Record - *$ttl*:   Time to Live for the Resource Record. Optional. - -*/ -define bind::cname($ensure=present, -    $zone, -    $owner=false, -    $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 deleted file mode 100644 index 10f34b8..0000000 --- a/manifests/definitions/bind-mx.pp +++ /dev/null @@ -1,34 +0,0 @@ -/* - -= Definition: bind::mx -Creates an MX record. - -Arguments: - *$zone*:     Bind::Zone name - *$owner*:    owner of the Resource Record - *$priority*: MX record priority - *$host*:     target of the Resource Record - *$ttl*:      Time to Live for the Resource Record. Optional. - -*/ -define bind::mx($ensure=present, -    $zone, -    $owner=false, -    $priority, -    $host, -    $ttl=false) { - -  if $owner { -    $_owner = $owner -  } else { -    $_owner = $name -  } - -  common::concatfilepart{"bind.${name}": -    file    => "/etc/bind/pri/${zone}.conf", -    ensure  => $ensure, -    notify  => Service["bind9"], -    content => template("bind/mx-record.erb"), -  } -} - diff --git a/manifests/definitions/bind-ns.pp b/manifests/definitions/bind-ns.pp deleted file mode 100644 index 3d07aea..0000000 --- a/manifests/definitions/bind-ns.pp +++ /dev/null @@ -1,27 +0,0 @@ -/* - -= Definition: bind::ns -Creates an NS record. - -Arguments: - *$zone*:  Bind::Zone name - *$owner*: owner of the Resource Record - *$host*:  target of the Resource Record - *$ttl*:   Time to Live for the Resource Record. Optional. - -*/ -define bind::ns($ensure=present, -    $zone, -    $owner=false, -    $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 deleted file mode 100644 index d551d60..0000000 --- a/manifests/definitions/bind-record.pp +++ /dev/null @@ -1,35 +0,0 @@ -/* - -= Definition: bind::record -Helper to create any record you want (but NOT MX, please refer to Bind::Mx) - -Arguments: - *$zone*:        Bind::Zone name - *$owner*:       owner of the Resource Record - *$host*:        target of the Resource Record - *$record_type°:  resource record type - *$record_class*: resource record class. Default "IN". - *$ttl*:          Time to Live for the Resource Record. Optional. - -*/ -define bind::record($ensure=present, -    $zone, -    $owner=false, -    $host, -    $record_type, -    $record_class='IN', -    $ttl=false) { - -  if $owner { -    $_owner = $owner -  } else { -    $_owner = $name -  } - -  common::concatfilepart {"${zone}.${record_type}.${name}": -    ensure  => $ensure, -    file    => "/etc/bind/pri/${zone}.conf", -    content => template("bind/default-record.erb"), -    notify  => Service["bind9"], -  } -} diff --git a/manifests/definitions/bind-zone.pp b/manifests/definitions/bind-zone.pp deleted file mode 100644 index 64da5da..0000000 --- a/manifests/definitions/bind-zone.pp +++ /dev/null @@ -1,88 +0,0 @@ -/* - -= Definition: bind::zone -Creates a valid Bind9 zone. - -Arguments: -  *$is_slave*:          Boolean. Is your zone a slave or a master? Default false -  *$zone_ttl*:          Time period. Time to live for your zonefile (master only) -  *$zone_contact*:      Valid contact record (master only) -  *$zone_serial*:       Integer. Zone serial (master only) -  *$zone_refresh*:      Time period. Time between each slave refresh (master only) -  *$zone_retry*:        Time period. Time between each slave retry (master only) -  *$zone_expiracy*:     Time period. Slave expiracy time (master only) -  *$zone_ns*:           Valid NS for this zone (master only) -  *$zone_xfers*:        IPs. Valid xfers for zone (master only) -  *$zone_masters*:      IPs. Valid master for this zone (slave only) - -*/ -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", -    require => Package["bind9"], -  } - -  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", -    require => Package["bind9"], -  } - -  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"), -      require => Package["bind9"], -    } - -    file {"/etc/bind/pri/${name}.conf.d": -      ensure => directory, -      mode   => 0700, -      purge  => true, -      recurse => true, -      backup  => false, -      force   => true, -    } -  } -} diff --git a/manifests/generate.pp b/manifests/generate.pp new file mode 100644 index 0000000..49a56dc --- /dev/null +++ b/manifests/generate.pp @@ -0,0 +1,87 @@ +# = definition: bind::generate +# +# Creates a $GENERATE directive for a specific zone +# +# == Arguments +#  $zone:         mandatory - zone name. Must reflect a bind::zone resource +#  $range:        mandatory - range allocated to internal generate directive. +#                 Must be in the form 'first-last', like '2-254' +#  $record_type:  mandatory - must be one of PTR, CNAME, DNAME, A, AAAA and NS +#  $lhs:          mandatory - generated name (see examples) +#  $rhs:          mandatory - record target (see examples) +#  $record_class: optional - incompatible with pre-9.3 bind versions +#  $ttl:          optional - time tolive for generated records +# +# == Examples +# +# bind::zone {'test.tld': +#   zone_contact => 'contact.test.tld', +#   zone_ns      => 'ns0.test.tld', +#   zone_serial  => '2012112901', +#   zone_ttl     => '604800', +#   zone_origin  => 'test.tld', +# } +# ## Generate A records +# bind::generate {'a-records': +#   zone        => 'test.tld', +#   range       => '2-100', +#   record_type => 'A', +#   lhs         => 'dhcp-$', # creates dhcp-2.test.tld, dhcp-3.test.tld … +#   rhs         => '10.10.0.$', # creates IP 10.10.0.2, 10.10.0.3 … +# } +# ## Means: dig dhcp-10.test.tld will resolv to 10.10.0.10 +# +# ## Generate CNAME records +# bind::generate {'a-records': +#   zone        => 'test.tld', +#   range       => '2-100', +#   record_type => 'CNAME', +#   lhs         => 'dhcp-$', # creates dhcp-2.test.tld, dhcp-3.test.tld … +#   rhs         => 'dhcp$',  # creates IP dhcp2.test.tld, dhcp3.test.tld … +# } +# ## Means: dig dhcp10.test.tld => dhcp-10.test.tld => 10.10.0.10 +# +# bind::zone {'0.10.10.IN-ADDR.ARPA': +#   zone_contact => 'contact.test.tld', +#   zone_ns      => 'ns0.test.tld', +#   zone_serial  => '2012112901', +#   zone_ttl     => '604800', +#   zone_origin  => '0.10.10.IN-ADDR.ARPA', +# } +# ## Generates PTR +# bind::generate {'ptr-records': +#   zone        => '0.10.10.IN-ADDR.ARPA', +#   range       => '2-100', +#   record_type => 'PTR', +#   lhs         => '$.0.10.10.IN-ADDR.ARPA.', # 2.0.10.10.IN-ADDR.ARPA … +#   rhs         => 'dhcp-$.test.tld.', # creates dhcp-2.test.tld … +# } +# ## Means: dig 10.10.0.10 will resolv to dhcp-10.test.tld +# +# +# For more information regarding this directive +# and the definition arguments, please have a +# look at +# http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.ch06.html#id2566761 +# +# NOTE: in order to prevent some funky-funny thing, the orignal +# "class" and "type" variables +# are renamed as $record_class and $record_type in this definition. +# +define bind::generate( +  $zone, +  $range, +  $record_type, +  $lhs, +  $rhs, +  $ensure=present, +  $record_class='', +  $ttl='') { + +  concat::fragment {"${zone}.${record_type}.${range}.generate": +    ensure  => $ensure, +    target  => "/etc/bind/pri/${zone}.conf", +    content => template('bind/generate.erb'), +    notify  => Service['bind9'], +  } +} diff --git a/manifests/init.pp b/manifests/init.pp index 6cc1969..ff88737 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,2 +1,53 @@ -import "classes/*.pp" -import "definitions/*.pp" +# = Class: bind +# Include this class to install bind9 server on your node. +# +# Bind documentation: +# http://www.bind9.net/manuals +# +# Limitations: +# This modules is valid for Bind 9.7.1 (squeeze version). +# For 9.7.2, it will be really limited (no view nor ACL support). +# +# +# Example: +# +# node 'ns1.domain.ltd' { +# +#   include bind +# +#   bind::zone {'domain.ltd': +#     ensure       => present, +#     zone_contact => "contact.domain.ltd", +#     zone_ns      => $fqdn, +#     zone_serial  => '2010110804', +#     zone_ttl     => '604800', +#   } +# +#   bind::a {"ns $fqdn": +#     zone  => 'domain.ltd', +#     owner => "${fqdn}.", +#     host  => $ipaddress, +#   } +# +#   bind::a {'mail.domain.ltd': +#     zone  => 'domain.ltd', +#     owner => 'mail', +#     host  => '6.6.6.6', +#   } +# +#   bind::mx {'mx1': +#     zone     => 'domain.ltd', +#     owner    => '@', +#     priority => 1, +#     host     => 'mail.domain.ltd', +#   } +# } +# +class bind { + +  case $::operatingsystem { +    'Debian','Ubuntu': { include bind::debian } +    default          : { fail "Unknown ${::operatingsystem}" } +  } + +} diff --git a/manifests/mx.pp b/manifests/mx.pp new file mode 100644 index 0000000..0df5b6f --- /dev/null +++ b/manifests/mx.pp @@ -0,0 +1,34 @@ +# = Definition: bind::mx +# Creates an MX record. +# +# Arguments: +#  *$zone*:     Bind::Zone name +#  *$owner*:    owner of the Resource Record +#  *$priority*: MX record priority +#  *$host*:     target of the Resource Record +#  *$ttl*:      Time to Live for the Resource Record. Optional. +# +define bind::mx ( +  $zone, +  $host, +  $priority, +  $ensure = present, +  $owner  = false, +  $ttl    = false +) { + +  if $owner { +    $_owner = $owner +  } else { +    $_owner = $name +  } + +  concat::fragment {"bind.${name}": +    ensure  => $ensure, +    target  => "/etc/bind/pri/${zone}.conf", +    content => template('bind/mx-record.erb'), +    notify  => Service['bind9'], +  } + +} + diff --git a/manifests/ns.pp b/manifests/ns.pp new file mode 100644 index 0000000..e0fbeef --- /dev/null +++ b/manifests/ns.pp @@ -0,0 +1,28 @@ +# = Definition: bind::ns +# +# Creates an NS record. +# +# Arguments: +#  *$zone*:  Bind::Zone name +#  *$owner*: owner of the Resource Record +#  *$host*:  target of the Resource Record +#  *$ttl*:   Time to Live for the Resource Record. Optional. +# +define bind::ns ( +  $zone, +  $host, +  $ensure = present, +  $owner  = false, +  $ttl    = false +) { + +  bind::record {$name: +    ensure      => $ensure, +    zone        => $zone, +    owner       => $owner, +    host        => $host, +    ttl         => $ttl, +    record_type => 'NS', +  } + +} diff --git a/manifests/ptr.pp b/manifests/ptr.pp new file mode 100644 index 0000000..d4bb052 --- /dev/null +++ b/manifests/ptr.pp @@ -0,0 +1,28 @@ +# = Definition: bind::ptr +# +# Creates a PTR record. +# +# Arguments: +#  *$zone*:  Bind::Zone name +#  *$owner*: number of the Resource Record +#  *$host*:  target of the Resource Record +#  *$ttl*:   Time to Live for the Resource Record. Optional. +# +define bind::ptr( +  $zone, +  $host, +  $ensure = present, +  $owner  = false, +  $ttl    = false +) { + +  bind::record {$name: +    ensure      => $ensure, +    zone        => $zone, +    owner       => $owner, +    host        => $host, +    ttl         => $ttl, +    record_type => 'PTR', +  } + +} diff --git a/manifests/record.pp b/manifests/record.pp new file mode 100644 index 0000000..dc43aaa --- /dev/null +++ b/manifests/record.pp @@ -0,0 +1,36 @@ +# = Definition: bind::record +# +# Helper to create any record you want (but NOT MX, please refer to Bind::Mx) +# +# Arguments: +#  *$zone*:        Bind::Zone name +#  *$owner*:       owner of the Resource Record +#  *$host*:        target of the Resource Record +#  *$record_type°:  resource record type +#  *$record_class*: resource record class. Default "IN". +#  *$ttl*:          Time to Live for the Resource Record. Optional. +# +define bind::record ( +  $zone, +  $host, +  $record_type, +  $ensure       = present, +  $owner        = false, +  $record_class = 'IN', +  $ttl          = false +) { + +  if $owner { +    $_owner = $owner +  } else { +    $_owner = $name +  } + +  concat::fragment {"${zone}.${record_type}.${name}": +    ensure  => $ensure, +    target  => "/etc/bind/pri/${zone}.conf", +    content => template('bind/default-record.erb'), +    notify  => Service['bind9'], +  } + +} diff --git a/manifests/txt.pp b/manifests/txt.pp new file mode 100644 index 0000000..92b3ba4 --- /dev/null +++ b/manifests/txt.pp @@ -0,0 +1,28 @@ +# = Definition: bind::txt +# +# Creates an IPv4 record. +# +# Arguments: +#  *$zone*:  Bind::Zone name +#  *$owner*: owner of the Resource Record +#  *$text*:  target of the Resource Record +#  *$ttl*:   Time to Live for the Resource Record. Optional. +# +define bind::txt ( +  $zone, +  $text, +  $ensure = present, +  $owner  = false, +  $ttl    = false +) { + +  bind::record {$name: +    ensure      => $ensure, +    zone        => $zone, +    owner       => $owner, +    host        => $text, +    ttl         => $ttl, +    record_type => 'TXT', +  } + +} diff --git a/manifests/zone.pp b/manifests/zone.pp new file mode 100644 index 0000000..1b61788 --- /dev/null +++ b/manifests/zone.pp @@ -0,0 +1,116 @@ +# = Definition: bind::zone +# +# Creates a valid Bind9 zone. +# +# Arguments: +#  *$is_slave*: Boolean. Is your zone a slave or a master? Default false +#  *$zone_ttl*: Time period. Time to live for your zonefile (master only) +#  *$zone_contact*: Valid contact record (master only) +#  *$zone_serial*: Integer. Zone serial (master only) +#  *$zone_refresh*: Time period. Time between each slave refresh (master only) +#  *$zone_retry*: Time period. Time between each slave retry (master only) +#  *$zone_expiracy*: Time period. Slave expiracy time (master only) +#  *$zone_ns*: Valid NS for this zone (master only) +#  *$zone_xfers*: IPs. Valid xfers for zone (master only) +#  *$zone_masters*: IPs. Valid master for this zone (slave only) +#  *$zone_origin*: The origin of the zone +# +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, +  $zone_origin   = false +) { + +  concat::fragment {"named.local.zone.${name}": +    ensure  => $ensure, +    target  => '/etc/bind/named.conf.local', +    content => "include \"/etc/bind/zones/${name}.conf\";\n", +    notify  => Service['bind9'], +    require => Package['bind9'], +  } + +  case $ensure { +    present: { +      concat {"/etc/bind/zones/${name}.conf": +        owner => root, +        group => root, +        mode  => '0644', +      } +      concat::fragment {"bind.zones.${name}": +        ensure  => $ensure, +        target  => "/etc/bind/zones/${name}.conf", +        notify  => Service['bind9'], +        require => Package['bind9'], +      } + + +      if $is_slave { +        if !$zone_masters { +          fail "No master defined for ${name}!" +        } +        Concat::Fragment["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}!" +        } + +        concat {"/etc/bind/pri/${name}.conf": +          owner => root, +          group => root, +          mode  => '0644', +        } + + +        Concat::Fragment["bind.zones.${name}"] { +          content => template('bind/zone-master.erb'), +        } + +        concat::fragment {"00.bind.${name}": +          ensure  => $ensure, +          target  => "/etc/bind/pri/${name}.conf", +          content => template('bind/zone-header.erb'), +          require => Package['bind9'], +        } + +        file {"/etc/bind/pri/${name}.conf.d": +          ensure  => absent, +          mode    => '0700', +          purge   => true, +          recurse => true, +          backup  => false, +          force   => true, +        } +      } +    } +    absent: { +      file {"/etc/bind/pri/${name}.conf": +        ensure => absent, +      } +      file {"/etc/bind/zones/${name}.conf": +        ensure => absent, +      } +    } +    default: {} +  } +} diff --git a/templates/generate.erb b/templates/generate.erb new file mode 100644 index 0000000..0c15823 --- /dev/null +++ b/templates/generate.erb @@ -0,0 +1 @@ +$GENERATE <%=range%> <%=lhs%> <%=ttl%> <%=record_class%> <%=record_type%> <%=rhs%> ; <%=name%> diff --git a/templates/zone-header.erb b/templates/zone-header.erb index da93b31..418aef8 100644 --- a/templates/zone-header.erb +++ b/templates/zone-header.erb @@ -1,5 +1,8 @@  ; File managed by puppet  $TTL <%=zone_ttl%> +<% if zone_origin -%> +$ORIGIN <%=zone_origin%> +<% end -%>  @ IN SOA <%=name%>. <%=zone_contact%>. (        <%=zone_serial%>  ; serial        <%=zone_refresh%> ; refresh diff --git a/templates/zone-slave.erb b/templates/zone-slave.erb index b5b3754..0ae7e5d 100644 --- a/templates/zone-slave.erb +++ b/templates/zone-slave.erb @@ -7,5 +7,4 @@ zone <%=name%> IN {    masters { <%= zone_masters %>; };    <% end -%>    allow-query { any; }; -  notify yes; -} +};  | 
