puppet-openstacklib/lib/puppet/parser/functions/normalize_ip_for_uri.rb

38 lines
1.1 KiB
Ruby

require 'ipaddr'
module Puppet::Parser::Functions
newfunction(:normalize_ip_for_uri,
:type => :rvalue,
:doc => <<-EOD
Add brackets if the argument is an IPv6 address.
Returns the argument untouched otherwise.
CAUTION: this code "fails" when the user is passing
an IPv6 address with the port in it without the
brackets: 2001::1:8080, to specify address 2001::1
and port 8080. This code will change it to
[2001::1:8080] as it's a valid ip address. This
shouldn't be an issue in most cases.
If an array is given, each member will be normalized to
a valid IPv6 address with brackets when needed.
EOD
) do |args|
result = []
args = args[0] if args[0].kind_of?(Array)
args.each do |ip|
begin
if IPAddr.new(ip).ipv6?
unless ip.match(/\[.+\]/)
Puppet.debug("IP #{ip} is changed to [#{ip}]")
ip = "[#{ip}]"
end
end
rescue ArgumentError
# ignore it
end
result << ip
end
return result[0] if args.size == 1
result
end
end