38 lines
1.1 KiB
Ruby
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
|