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
	 Sofer Athlan-Guyot
					Sofer Athlan-Guyot