class Puppet::Indirector::FileContent::Rest

Public Instance Methods

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