129: def evaluate(resource)
130: start = Time.now
131: status = Puppet::Resource::Status.new(resource)
132:
133: perform_changes(resource).each do |event|
134: status << event
135: end
136:
137: if status.changed? && ! resource.noop?
138: cache(resource, :synced, Time.now)
139: resource.flush if resource.respond_to?(:flush)
140: end
141:
142: return status
143: rescue => detail
144: resource.fail "Could not create resource status: #{detail}" unless status
145: puts detail.backtrace if Puppet[:trace]
146: resource.err "Could not evaluate: #{detail}"
147: status.failed = true
148: return status
149: ensure
150: (status.evaluation_time = Time.now - start) if status
151: end