Merge "Utility to handle IPv6 address brackets."
This commit is contained in:
commit
73d9983c08
31
lib/puppet/parser/functions/normalize_ip_for_uri.rb
Normal file
31
lib/puppet/parser/functions/normalize_ip_for_uri.rb
Normal 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
|
13
spec/functions/normalize_ip_for_uri_spec.rb
Normal file
13
spec/functions/normalize_ip_for_uri_spec.rb
Normal 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
|
Loading…
x
Reference in New Issue
Block a user