Method: Puppet::Pops::Evaluator::DeferredResolver#resolve_futures

Defined in:
lib/puppet/pops/evaluator/deferred_resolver.rb

#resolve_futures(catalog) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/puppet/pops/evaluator/deferred_resolver.rb', line 86

def resolve_futures(catalog)
  catalog.resources.each do |r|
    overrides = {}
    r.parameters.each_pair do |k, v|
      resolved = resolve(v)
      case resolved
      when Puppet::Pops::Types::PSensitiveType::Sensitive
        # If the resolved value is instance of Sensitive - assign the unwrapped value
        # and mark it as sensitive if not already marked
        #
        resolved = resolved.unwrap
        mark_sensitive_parameters(r, k)

      when Puppet::Pops::Evaluator::DeferredValue
        # If the resolved value is a DeferredValue and it has an argument of type
        # PSensitiveType, mark it as sensitive. Since DeferredValues can nest,
        # we must walk all arguments, e.g. the DeferredValue may call the `epp`
        # function, where one of its arguments is a DeferredValue to call the
        # `vault:lookup` function.
        #
        # The DeferredValue.resolve method will unwrap the sensitive during
        # catalog application
        #
        if contains_sensitive_args?(v)
          mark_sensitive_parameters(r, k)
        end
      end
      overrides[ k ] = resolved
    end
    r.parameters.merge!(overrides) unless overrides.empty?
  end
end