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