class Puppet::Indirector::FileContent::Rest

Public Instance Methods

find(request) click to toggle source
   # File lib/puppet/indirector/file_content/rest.rb
 9 def find(request)
10   content = StringIO.new
11   content.binmode
12 
13   url = URI.parse(Puppet::Util.uri_encode(request.uri))
14   session = Puppet.lookup(:http_session)
15   api = session.route_to(:fileserver, url: url)
16 
17   api.get_file_content(
18     path: Puppet::Util.uri_unescape(url.path),
19     environment: request.environment.to_s,
20   ) do |data|
21     content << data
22   end
23 
24   Puppet::FileServing::Content.from_binary(content.string)
25 rescue Puppet::HTTP::ResponseError => e
26   if e.response.code == 404
27     return nil unless request.options[:fail_on_404]
28 
29     _, body = parse_response(e.response)
30     msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
31     raise Puppet::Error, msg
32   else
33     raise convert_to_http_error(e.response)
34   end
35 end