summaryrefslogtreecommitdiff
path: root/lib/puppet/functions/dns_record/rev_record.rb
blob: 4b1d34ebbb4d905331adfb4f2d1cd649dc6e4fbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
require 'ipaddr'

Puppet::Functions.create_function(:'dns_record::rev_record') do
  dispatch :rev_record do
    param 'Stdlib::IP::Address::V6::Nosubnet', :ip
    param 'Stdlib::IP::Address::V6::Nosubnet', :netmask
    return_type 'Tuple[String,2]'
  end

  def rev_record(ip, netmask)
    cidr = IPAddr.new("::/#{netmask}").prefix
    addr = IPAddr.new ip
    parts = addr.ip6_arpa.split('.')

    [ parts.take(cidr/4).join('.'), 
      parts.drop(cidr/4).join('.') ]
  end
end