aboutsummaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/functions/ip_to_erl_format.rb
blob: 4c066b98bf4a89ea2491fd82701e2fc320450dad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
require 'ipaddr'

# Custom function to convert an IP4/6 address from a string to the
# erlang inet kernel format.
# For example from "172.17.0.16" to {172,17,0,16}
# See http://erlang.org/doc/man/kernel_app.html and http://erlang.org/doc/man/inet.html
# for more information.
module Puppet::Parser::Functions
  newfunction(:ip_to_erl_format, :type => :rvalue, :doc => "Convert an IP address to the erlang inet format.") do |arg|
    if arg[0].class != String
      raise Puppet::ParseError, "Syntax error: #{arg[0]} must be a String"
    end
    ip = IPAddr.new arg[0]
    output = '{'
    if ip.ipv6?
      split_char = ':'
      base = 16
    else
      split_char = '.'
      base = 10
    end
    # to_string() prints the canonicalized form
    ip.to_string().split(split_char).each {
      |x| output += x.to_i(base).to_s + ','
    }
    # Remove the last spurious comma
    output = output.chomp(',')
    output += '}'
    return output
  end
end