Skip to content

Commit b92e4d3

Browse files
m0dularjoshcooper
authored andcommitted
(PUP-11846) Handle unprocessed, deferred sensitive
Prior to this commit, evaluating a deferred resource that includes a Sensitive value would fail during munging. This commit marks these resources as sensitive and unwraps them during catalog application.
1 parent c8bba06 commit b92e4d3

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

lib/puppet/pops/evaluator/deferred_resolver.rb

+13-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@ def initialize(proc)
99
end
1010

1111
def resolve
12-
@proc.call
12+
val = @proc.call
13+
# Deferred sensitive values will be marked as such in resolve_futures()
14+
if val.is_a?(Puppet::Pops::Types::PSensitiveType::Sensitive)
15+
val.unwrap
16+
else
17+
val
18+
end
1319
end
1420
end
1521

@@ -90,6 +96,12 @@ def resolve_futures(catalog)
9096
unless r.sensitive_parameters.include?(k.to_sym)
9197
r.sensitive_parameters = (r.sensitive_parameters + [k.to_sym]).freeze
9298
end
99+
# If the value is a DeferredValue and it has an argument of type PSensitiveType, mark it as sensitive
100+
# The DeferredValue.resolve method will unwrap it during catalog application
101+
elsif resolved.is_a?(Puppet::Pops::Evaluator::DeferredValue)
102+
if v.arguments.any? {|arg| arg.is_a?(Puppet::Pops::Types::PSensitiveType)} and not r.sensitive_parameters.include?(k.to_sym)
103+
r.sensitive_parameters = (r.sensitive_parameters + [k.to_sym]).freeze
104+
end
93105
end
94106
overrides[ k ] = resolved
95107
end

0 commit comments

Comments
 (0)