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

37 lines
1.1 KiB
Ruby

# 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.
Puppet::Functions.create_function(:normalize_ip_for_uri) do
def normalize_ip_for_uri(*args)
require 'ipaddr'
result = []
args = args[0] if args[0].kind_of?(Array)
args = [args] unless args.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