Merge "Utility to handle IPv6 address brackets."

This commit is contained in:
Jenkins 2016-02-11 18:13:16 +00:00 committed by Gerrit Code Review
commit 73d9983c08
2 changed files with 44 additions and 0 deletions

View File

@ -0,0 +1,31 @@
require 'ipaddr'
module Puppet::Parser::Functions
newfunction(:normalize_ip_for_uri,
:type => :rvalue,
:arity => 1,
: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.
EOD
) do |args|
ip = args[0]
begin
if IPAddr.new(ip).ipv6?
unless ip.match(/\[.+\]/)
Puppet.debug("IP #{ip} is changed to [#{ip}]")
ip = "[#{ip}]"
end
end
rescue ArgumentError => e
# ignore it
end
return ip
end
end

View File

@ -0,0 +1,13 @@
require 'spec_helper'
describe 'normalize_ip_for_uri' do
it { should run.with_params(false).and_return(false)}
it { should run.with_params('not_an_ip').and_return('not_an_ip')}
it { should run.with_params('127.0.0.1').and_return('127.0.0.1')}
it { should run.with_params('::1').and_return('[::1]')}
it { should run.with_params('[2001::01]').and_return('[2001::01]')}
it do
is_expected.to run.with_params('one', 'two')
.and_raise_error(ArgumentError, /Wrong number of arguments/)
end
end