Utility to handle IPv6 address brackets.
This add the function normalize_ip_for_uri to the parser. It encloses into brackets any valid IPv6 address thrown at it. Change-Id: I093dd5a4e6294e20761cb3d33373652eeadeac36 Closes-bug: 1531960
This commit is contained in:
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
|
Reference in New Issue
Block a user