diff options
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r-- | lib/puppet/provider/dns_record2/named.rb | 90 | ||||
-rw-r--r-- | lib/puppet/provider/dns_zone2/named.rb | 80 |
2 files changed, 49 insertions, 121 deletions
diff --git a/lib/puppet/provider/dns_record2/named.rb b/lib/puppet/provider/dns_record2/named.rb index 61f4a96..13fe5ee 100644 --- a/lib/puppet/provider/dns_record2/named.rb +++ b/lib/puppet/provider/dns_record2/named.rb @@ -1,39 +1,16 @@ -# require 'resolv' - Puppet::Type.type(:dns_record2).provide(:named) do def self.instances - objects = [] - # `named-checkconf -l`.split("\n").each do |zone| - # zonename, cls, view, _ = zone.split(' ') - # path = `rndc zonestatus #{zonename} #{cls} #{view} 2>/dev/null | awk -F' ' '/^files:/ { print $2 }'`.strip; - # `named-checkzone -q -D #{zonename} /var/named/#{path} | sed 's/[[:space:]]\+/ /g'`.split("\n").each do |record| - # key, ttl, cls, type, *value = record.split(' ') - # value = value.join(' ') - - # name = "#{zonename} #{cls} #{view} #{key} #{type} #{value}" - - # objects << new(:name => name, - # :key => key, - # :ttl => ttl, - # :class => cls, - # :type => type, - # :value => value) - # end - # end - objects + [] end - def create - # print("Create\n") - end + # Create and destroy don't do anything on their own, + # See comment in type + def create; end - def destroy - # print("Destroy\n") - end + def destroy; end def exists? - # print("record = [#{record().inspect}]\n") - record() != nil + record != nil end def type @@ -41,8 +18,7 @@ Puppet::Type.type(:dns_record2).provide(:named) do end def value - # print("Get old value (#{resource[:value]}, #{get(:value)})\n") - t = record() + t = record case t when NilClass :absent @@ -53,10 +29,8 @@ Puppet::Type.type(:dns_record2).provide(:named) do end end - def value=(v) - # print("Set new value (#{v})\n") - # resource[:value] = v - end + # TODO: should we have this? + def value=(v); end def key resource[:key] @@ -80,49 +54,17 @@ Puppet::Type.type(:dns_record2).provide(:named) do end end - # def zone=(v) - # # set(:zone, v) - # resource[:zone] = v - # end - def record - # dns = Resolv::DNS.new(nameserver: ['localhost']) - # type = { - # A: Resolv::DNS::Resource::IN::A, - # AAAA: Resolv::DNS::Resource::IN::AAAA, - # CNAME: Resolv::DNS::Resource::IN::CNAME, - # HINFO: Resolv::DNS::Resource::IN::HINFO, - # MINFO: Resolv::DNS::Resource::IN::MINFO, - # MX: Resolv::DNS::Resource::IN::MX, - # NS: Resolv::DNS::Resource::IN::NS, - # PTR: Resolv::DNS::Resource::IN::PTR, - # SOA: Resolv::DNS::Resource::IN::SOA, - # TXT: Resolv::DNS::Resource::IN::TXT, - # WKS: Resolv::DNS::Resource::IN::WKS, - # }[resource[:type]] - - # if type == nil - # nil - # else - # rs = dns.getresources(full_key, type) - # if rs.length == 0 - # nil - # else - # rs[0] - # end - # end lines = `named-checkzone -j -q -D #{zone} /var/named/zones/#{zone}db` - .split("\n") - .map {|line| line.gsub(/[[:space:]]+/, ' ').split(' ') } - - matches = lines - .filter {|line| - line[0] == full_key and line[3].to_sym == resource[:type] - } - .map {|line| line[(4..)].join(' ') } + .split("\n") + .map { |line| line.gsub(%r{[[:space:]]+}, ' ').split(' ') } + matches = + lines + .filter { |line| line[0] == full_key && line[3].to_sym == resource[:type] } + .map { |line| line[(4..)].join(' ') } - if matches.length == 0 + if matches.empty? nil elsif matches.length == 1 matches[0] diff --git a/lib/puppet/provider/dns_zone2/named.rb b/lib/puppet/provider/dns_zone2/named.rb index e249be6..d929322 100644 --- a/lib/puppet/provider/dns_zone2/named.rb +++ b/lib/puppet/provider/dns_zone2/named.rb @@ -1,8 +1,8 @@ Puppet::Type.type(:dns_zone2).provide(:named) do def self.instances `named-checkconf -l`.split("\n").map do |record| - name, cls, view, type = record.split(' '); - new(:name => name, :cls => cls, :view => view, :type => type) + name, cls, view, type = record.split(' ') + new(name: name, cls: cls, view: view, type: type) end end @@ -12,7 +12,7 @@ Puppet::Type.type(:dns_zone2).provide(:named) do end def destroy - print("Remove #{resource[:name]}\n") + print("Remove #{resource[:name]}\n") end def refresh(records) @@ -25,8 +25,9 @@ Puppet::Type.type(:dns_zone2).provide(:named) do # resource[:ensure] == :present `named-checkconf -l` .split("\n") - .grep(/#{resource[:origin]} /) - .length > 0 + .grep(%r{#{resource[:origin]} }) + .empty? + .! end def filename @@ -34,53 +35,38 @@ Puppet::Type.type(:dns_zone2).provide(:named) do end def zone_content(records) - content = <<~EOF - ; File managed by Puppet. - ; Local changes WILL be overwritten - ; File last generated #{Time.now} + content = <<~EOF + ; File managed by Puppet. + ; Local changes WILL be overwritten + ; File last generated #{Time.now} - $ORIGIN #{resource[:origin]} - $TTL #{resource[:default_ttl]} + $ORIGIN #{resource[:origin]} + $TTL #{resource[:default_ttl]} - @ #{resource[:soa_ttl]} IN SOA #{resource[:mname]} #{resource[:rname]} ( - #{serial+1} ; serial - #{resource[:refresh]} ; refresh - #{resource[:retry]} ; retry - #{resource[:expire]} ; expire - #{resource[:negative_ttl]} ; Negative TTL - ) - EOF + @ #{resource[:soa_ttl]} IN SOA #{resource[:mname]} #{resource[:rname]} ( + #{serial + 1} ; serial + #{resource[:refresh]} ; refresh + #{resource[:retry]} ; retry + #{resource[:expire]} ; expire + #{resource[:negative_ttl]} ; Negative TTL + ) + EOF - records - .filter {|r| r[:zone] == resource[:name] } - .group_by {|r| r[:type]} - .sort_by {|(type, _)| - # Bit of a hack, but ensures that SOA is always first, - # NS is after - # And the rest have stable order - { - SOA: 0, - NS: 1, - A: 2, - AAAA: 3, - CNAME: 4, - HINFO: 5, - MINFO: 6, - MX: 7, - PTR: 8, - TXT: 9, - WKS: 10, - }[type] - }.each{|(type, values)| + records + .filter { |r| r[:zone] == resource[:name] } + .group_by { |r| r[:type] } + .sort # Sort to ensure stable order in output, actual order doesn't matter. + .each do |(type, values)| + content += <<~EOF + ; #{type} Records + EOF + values.each do |val| content += <<~EOF - ; #{type} Records + #{val[:key]} #{val[:ttl]} IN #{val[:type]} #{val[:value]} EOF - values.each {|val| - content += <<~EOF - #{val[:key]} #{val[:ttl]} IN #{val[:type]} #{val[:value]} - EOF - } - } + end + end + content end |