diff options
author | Jenkins <jenkins@review.openstack.org> | 2017-01-25 02:29:17 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-01-25 02:29:17 +0000 |
commit | d89ba57f591166f9c90504fa0fbd12f452446444 (patch) | |
tree | 0e09a3472675738ac2e6c58b3cf7e41dc95738e1 /lib | |
parent | 947c4933743af9c8d220a45b09810fcf01c9aa04 (diff) | |
parent | 2f038b30e8f306d59f7e14471d88d7616026c6ff (diff) |
Merge "Make sure we bind the rabbit inter-cluster to a specific interface"
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/parser/functions/ip_to_erl_format.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/ip_to_erl_format.rb b/lib/puppet/parser/functions/ip_to_erl_format.rb new file mode 100644 index 0000000..4c066b9 --- /dev/null +++ b/lib/puppet/parser/functions/ip_to_erl_format.rb @@ -0,0 +1,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 |