diff options
Diffstat (limited to '')
-rw-r--r-- | lib/puppet/provider/dns_record2/named.rb | 2 | ||||
-rw-r--r-- | lib/puppet/provider/dns_zone2/named.rb | 8 | ||||
-rw-r--r-- | lib/puppet/type/dns_record2.rb | 10 | ||||
-rw-r--r-- | lib/puppet/type/dns_zone2.rb | 38 | ||||
-rw-r--r-- | manifests/record.pp | 13 | ||||
-rw-r--r-- | manifests/zone.pp | 4 |
6 files changed, 61 insertions, 14 deletions
diff --git a/lib/puppet/provider/dns_record2/named.rb b/lib/puppet/provider/dns_record2/named.rb index 88bc73e..a055812 100644 --- a/lib/puppet/provider/dns_record2/named.rb +++ b/lib/puppet/provider/dns_record2/named.rb @@ -42,7 +42,7 @@ Puppet::Type.type(:dns_record2).provide(:named) do end def record - lines = `named-checkzone -j -q -D #{zone} /var/named/zones/#{zone}db` + lines = `#{resource[:named_checkzone]} -j -q -D #{zone} /var/named/zones/#{zone}db` .split("\n") .map { |line| line.gsub(%r{[[:space:]]+}, ' ').split(' ') } diff --git a/lib/puppet/provider/dns_zone2/named.rb b/lib/puppet/provider/dns_zone2/named.rb index 3a59c81..68f57da 100644 --- a/lib/puppet/provider/dns_zone2/named.rb +++ b/lib/puppet/provider/dns_zone2/named.rb @@ -1,13 +1,13 @@ Puppet::Type.type(:dns_zone2).provide(:named) do def self.instances - `named-checkconf -l`.split("\n").map do |record| + `#{resource[:named_checkconf]} -l`.split("\n").map do |record| name, cls, view, type = record.split(' ') new(name: name, cls: cls, view: view, type: type) end end def exists? - `named-checkconf -l` + `#{resource[:named_checkconf]} -l` .split("\n") .grep(%r{^#{origin_rx} }) .empty? @@ -15,7 +15,7 @@ Puppet::Type.type(:dns_zone2).provide(:named) do end def filename - "/var/named/zones/#{resource[:name]}db" + "#{resource[:directory]}/#{resource[:name]}db" end def zone_content(records, serial_change) @@ -56,7 +56,7 @@ Puppet::Type.type(:dns_zone2).provide(:named) do # The current (before updating) serial of the zone def serial - `rndc zonestatus #{name} | awk -F' ' '/^serial:/ { print $2 }'`.to_i + `#{resource[:rndc]} zonestatus #{name} | awk -F' ' '/^serial:/ { print $2 }'`.to_i end # A regex matching the origin diff --git a/lib/puppet/type/dns_record2.rb b/lib/puppet/type/dns_record2.rb index 098d27d..82526cf 100644 --- a/lib/puppet/type/dns_record2.rb +++ b/lib/puppet/type/dns_record2.rb @@ -74,4 +74,14 @@ Puppet::Type.newtype(:dns_record2) do TTL of this record. EOF end + + newparam(:named_checkzone) do + desc <<~EOF + Absolute path to the named-checkzone binaries. + + Used by the provider to get its initial state. + EOF + + defaultto '/usr/bin/named-checkzone' + end end diff --git a/lib/puppet/type/dns_zone2.rb b/lib/puppet/type/dns_zone2.rb index e21af6d..5f0b537 100644 --- a/lib/puppet/type/dns_zone2.rb +++ b/lib/puppet/type/dns_zone2.rb @@ -14,7 +14,7 @@ Puppet::Type.newtype(:dns_zone2, self_refresh: true) do ensurable def refresh - catalog.resource("File[/var/named/zones/#{self[:name]}db]")[:content] = should_content(1) + catalog.resource("File[#{self[:directory]}/#{self[:name]}db]")[:content] = should_content(1) end # List of all DNS records (at all) @@ -35,7 +35,7 @@ Puppet::Type.newtype(:dns_zone2, self_refresh: true) do ensure: self[:ensure], path: provider.filename, # notify: self[:notify], - validate_cmd: "/usr/sbin/named-checkzone #{self[:origin]} %" + validate_cmd: "#{self[:named_checkzone]} #{self[:origin]} %" } [:owner, @@ -61,6 +61,28 @@ Puppet::Type.newtype(:dns_zone2, self_refresh: true) do [Puppet::Type.type(:file).new(params)] end + newparam(:named_checkzone) do + desc <<-EOF + Absolute path to the named-checkzone binary. + EOF + + defaultto '/usr/bin/named-checkzone' + end + + newparam(:named_checkconf) do + desc <<-EOF + Absolute pathto the named-checkconf binary + EOF + defaultto '/usr/bin/named-checkconf' + end + + newparam(:rndc) do + desc <<-EOF + Absolute path to the rndc binary + EOF + defaultto '/usr/bin/rndc' + end + # Returning "our" file resource causes errors on the file to # propagate out from us (which is NEEDED for `validate_cmd` to # work). @@ -73,7 +95,7 @@ Puppet::Type.newtype(:dns_zone2, self_refresh: true) do # Ideally we wouldn't generate content here, but instead in # `create`. But that method isn't called def eval_generate - catalog.resource("File[/var/named/zones/#{self[:name]}db]")[:content] = should_content(0) + catalog.resource("File[#{self[:directory]}/#{self[:name]}db]")[:content] = should_content(0) [catalog.resource("File[#{provider.filename}]")] end @@ -278,4 +300,14 @@ Puppet::Type.newtype(:dns_zone2, self_refresh: true) do See the file resource's documentation for details. EOF end + + newparam(:directory) do + desc <<-EOF + Directory in which zone files will be stored. + EOF + + defaultto '/var/named/zones' + end + + autorequire(:file) { || [value(:directory)] } end diff --git a/manifests/record.pp b/manifests/record.pp index f94d1c8..e844cd4 100644 --- a/manifests/record.pp +++ b/manifests/record.pp @@ -62,11 +62,12 @@ define dns::record ( } dns_record2 { $name: - type => $type, - value => $value_, - cls => $cls, - zone => $zone, - ttl => $ttl, - key => $key, + type => $type, + value => $value_, + cls => $cls, + zone => $zone, + ttl => $ttl, + key => $key, + named_checkzone => $dns::checkzone, } } diff --git a/manifests/zone.pp b/manifests/zone.pp index bf35a52..eb2adbd 100644 --- a/manifests/zone.pp +++ b/manifests/zone.pp @@ -118,6 +118,10 @@ define dns::zone ( 'seluser' => $seluser, 'show_diff' => $show_diff, 'ensure' => $ensure, + 'named_checkzone' => $dns::checkzone, + 'named_checkconf' => $dns::checkconf, + 'rndc' => $dns::rndc, + 'directory' => $dns::zone_directory, } if $ensure == 'present' { |