Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Installs and configures Bind9 domain name server
Ruby Puppet HTML

Merge pull request #55 from interlegis/readme

Added parameters details to README
latest commit 80e293136d
@raphink raphink authored

Bind module for Puppet

Puppet Forge Build Status

Manages bind configuration under Debian / Ubuntu and CentOS.

This module is provided by Camptocamp

Exec paths

In order to not have any path problem, you should add the following line in some globally included .pp file:

Exec {
  path => '/some/relevant/path:/some/other:...',

For example:

Exec {
  path => '/bin:/sbin:/usr/sbin:/usr/bin',


  • bind


This class must be declared before using the definitions in this module.


  • bind::a
  • bind::generate
  • bind::mx
  • bind::record
  • bind::zone


Creates an A record (or a series thereof).

bind::a { 'Hosts in':
  ensure    => 'present',
  zone      => '',
  ptr       => false,
  hash_data => {
    'host1' => { owner => '', },
    'host2' => { owner => '', },
$ensure = present

Ensure the A record is present.


Zone name.


Zone data.

$ptr = true

Pointer records (PTR) are used to map a network interface to a host name. Primarily used for reverse DNS.

$zone_arpa = undef

Needed if $ptr is true. For reverse DNS you will have to setup your reverse DNS domain. This is a special domain that ends with

$content = undef

Zone content;

$content_template = undef

Zone content template.


Creates a $GENERATE directive for a specific zone

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, …
$ensure = present

Ensure the generate is present.


Zone name. Must reflect a bind::zone resource.


Range allocated to internal generate directive. Must be in the form 'first-last'.


Record type. Must be one of PTR, CNAME, DNAME, A, AAAA and NS.


Generated name.


Record target.

$record_class = undef

Record class. Not compatible with pre-9.3 bind versions.

$ttl = undef

Time to live for generated records.


Creates an MX record.

bind::mx {'mx1':
  zone     => '',
  owner    => '@',
  priority => 1,
  host     => '',
$ensure = present

Ensure the MX record is present.


Zone name.


Target of the resource record.


MX record priority.

$owner = undef

Owner of the resource record.

$ttl = undef

Time to live for the resource record.


Creates a generic record (or a series thereof).

bind::record {'CNAME':
  zone        => '',
  record_type => 'CNAME',
  hash_data   => {
    'ldap'      => { owner => 'ldap.internal', },
    'voip'      => { owner => 'voip.internal', },
$ensure = present

Ensure the record is present.


Zone name.


Hash containing data.


Resource record type.

$content = undef

Record content.

$content_template = undef

Allows you to do your own template, letting you use your own hash_data content structure.

$ptr_zone = undef

PTR zone.


Creates a zone.

bind::zone {'test.tld':
  zone_contact => 'contact.test.tld',
  zone_ns      => ['ns0.test.tld'],
  zone_serial  => '2012112901',
  zone_ttl     => '604800',
  zone_origin  => 'test.tld',
$ensure = present

Ensure the zone is present.

$is_dynamic = false

Boolean to set if a zone is dynamic.

$allow_update = []

List of hosts that are allowed to submit dynamic updates for master zones.

$transfer_source = undef

Source IP to bind to when requesting a transfer (slave only).

$zone_type = master

Specify if the zone is master/slave/forward.

$zone_ttl = undef

Time to live for your zonefile (master only).

$zone_contact = undef

Valid contact record (master only).

$zone_serial = undef

Zone serial (master only).

$zone_refresh = 3h

Time between each slave refresh (master only).

$zone_retry = 1h

Time between each slave retry (master only).

$zone_expirancy = 1w

Slave expiracy time (master only).

$zone_ns = []

Valid NS for this zone (master only).

$zone_xfers = undef

Valid xfers for zone (master only).

$zone_masters = undef

Valid master for this zone (slave only).

$zone_forwarders = undef

Valid forwarders for this zone (forward only).

$zone_origin = undef

The origin of the zone.

$zone_notify = undef

IPs to use for also-notify entry.

$if_slave = false

Boolean to set if a zone is slave.


Creates a key for dynamic zones. The 'secret' value is the key generated by dnssec-keygen.

bind::key { 'key_dyn.test.tld':
    ensure => present,
    secret => 'xUjDQqpBHao/o7mR2dza2/Tv2DQVo9pEuMfMwhdfzeaEFZAvwA='

bind::zone {'dyn.test.tld':
  zone_contact => 'contact.test.tld',
  zone_ns      => ['ns0.test.tld'],
  zone_serial  => '2012112901',
  zone_ttl     => '604800',
  zone_origin  => 'dyn.test.tld',
  is_dynamic   => true,
  allow_update => ['key_dyn.test.tld']
$ensure = present

Ensure the key is present.


Key content.

$algorithm = hmac-md5

Key algorithm.


Please report bugs and feature request using GitHub issue tracker.

For pull requests, it is very much appreciated to check your Puppet manifest with puppet-lint to follow the recommended Puppet style guidelines from the Puppet Labs style guide.


Copyright (c) 2013 All rights reserved.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <>.
Something went wrong with that request. Please try again.