diff --git a/lib/puppet/functions/regsubst.rb b/lib/puppet/functions/regsubst.rb index bd57b122667..7749513bd1d 100644 --- a/lib/puppet/functions/regsubst.rb +++ b/lib/puppet/functions/regsubst.rb @@ -30,7 +30,7 @@ # $i3 = regsubst($ipaddress,'^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$','\\3') # ``` dispatch :regsubst_string do - param 'Variant[Array[String],String]', :target + param 'Variant[Array[Variant[String,Sensitive[String]]],Variant[String,Sensitive[String]]]', :target param 'String', :pattern param 'Variant[String,Hash[String,String]]', :replacement optional_param 'Optional[Pattern[/^[GEIM]*$/]]', :flags @@ -67,7 +67,7 @@ # $x = regsubst($ipaddress, /([0-9]+)/, '<\\1>', 'G') # ``` dispatch :regsubst_regexp do - param 'Variant[Array[String],String]', :target + param 'Variant[Array[Variant[String,Sensitive[String]]],Variant[String,Sensitive[String]]]', :target param 'Variant[Regexp,Type[Regexp]]', :pattern param 'Variant[String,Hash[String,String]]', :replacement optional_param 'Pattern[/^G?$/]', :flags @@ -95,7 +95,18 @@ def regsubst_regexp(target, pattern, replacement, flags = nil) end def inner_regsubst(target, re, replacement, op) - target.respond_to?(op) ? target.send(op, re, replacement) : target.collect { |e| e.send(op, re, replacement) } + if target.respond_to?(:unwrap) + return_sensitive = true + target = target.unwrap + else + return_sensitive = false + end + result = target.respond_to?(op) ? target.send(op, re, replacement) : target.collect { |e| e.send(op, re, replacement) } + if return_sensitive + Puppet::Pops::Types::PSensitiveType::Sensitive.new(result) + else + result + end end private :inner_regsubst end