diff --git a/README.md b/README.md index ee505b2..8d688a3 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,16 @@ bind::zone { 'example.com': } ``` +A master zone for which the zone contents are managed by an external tool (this module just ensures the zone exists +and is served). Use of `resource_records` for an unmanaged zone is not supported. + +``` +bind::zone { 'example.com': + zone_type => 'master', + manage_contents => false, +} +``` + A slave zone which allows notifications from servers matched by IP: ``` diff --git a/manifests/zone.pp b/manifests/zone.pp index dd51ecf..9b9121c 100644 --- a/manifests/zone.pp +++ b/manifests/zone.pp @@ -19,6 +19,7 @@ $forwarders = '', $forward = '', $source = '', + $manage_contents = true, $forwarders_port = 53, ) { # where there is a zone, there is a server @@ -82,17 +83,20 @@ } $zone_file_mode = $zone_type ? { - 'master' => $dynamic ? { - true => 'init', - false => 'managed', + 'master' => $manage_contents ? { + true => $dynamic ? { + true => 'init', + false => 'managed', + }, + false => 'unmanaged', }, - 'slave' => 'allowed', - 'hint' => 'managed', - 'stub' => 'allowed', - default => 'absent', + 'slave' => 'allowed', + 'hint' => 'managed', + 'stub' => 'allowed', + default => 'absent', } - if member(['init', 'managed', 'allowed'], $zone_file_mode) { + if member(['init', 'managed', 'unmanaged', 'allowed'], $zone_file_mode) { file { "${cachedir}/${name}": ensure => directory, owner => $bind_user, @@ -101,6 +105,15 @@ require => Package['bind'], } + if member(['unmanaged'], $zone_file_mode) { + file { "${cachedir}/${name}/${zone_file}": + ensure => present, + owner => $bind_user, + group => $bind_group, + mode => '0644'; + } + } + if member(['init', 'managed'], $zone_file_mode) { file { "${cachedir}/${name}/${zone_file}": ensure => present, @@ -121,7 +134,7 @@ subscribe => File["${cachedir}/${name}/${zone_file}"], } } - } elsif $zone_file_mode == 'absent' { + } elsif $zone_file_mode == 'absent' and $manage_contents { file { "${cachedir}/${name}": ensure => absent, } diff --git a/templates/zone.conf.erb b/templates/zone.conf.erb index 8a36dd7..6c3da2e 100644 --- a/templates/zone.conf.erb +++ b/templates/zone.conf.erb @@ -10,7 +10,7 @@ zone "<%= @_domain %>" { key-directory "<%= @cachedir %>/<%= @name %>"; <%- end -%> file "<%= @cachedir %>/<%= @name %>/<%= @zone_file %>.signed"; -<%- elsif %w(init managed allowed).include? @zone_file_mode -%> +<%- elsif %w(init managed unmanaged allowed).include? @zone_file_mode -%> file "<%= @cachedir %>/<%= @name %>/<%= @zone_file %>"; <%- end -%> <%- if %w(master slave).include? @zone_type