summaryrefslogtreecommitdiff
path: root/lib/puppet/provider
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r--lib/puppet/provider/dns_record2/named.rb90
-rw-r--r--lib/puppet/provider/dns_zone2/named.rb80
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