Skip to content

Commit 70073c0

Browse files
stejskalleosronlavi2412
authored andcommitted
Fixes #36243 - Templates - Return Foreman's API status code instead of 500
1 parent 802ce04 commit 70073c0

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

lib/proxy/helpers.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def log_halt(code = nil, exception_or_msg = nil, custom_msg = nil)
2020
rescue => e
2121
exception = e
2222
message += e.message
23-
code ||= 400
23+
code ||= e.status_code
2424
end
2525
content_type :json if request.accept?("application/json")
2626
logger.error message, exception

modules/templates/proxy_request.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def call_template(method, path, env, params, body = '')
4848
logger.debug "HTTP headers: #{proxy_headers.inspect}"
4949
res = send_request(proxy_req)
5050
# You get a 201 from the 'built' URL
51-
raise "Error retrieving #{path} for #{opts.inspect} from #{uri.host}: #{res.class}" unless ["200", "201"].include?(res.code)
51+
raise ::Proxy::Error::HttpError.new(res.code.to_i, nil, "Error retrieving #{path} for #{opts.inspect} from #{uri.host}: #{res.class}") unless ["200", "201"].include?(res.code)
5252
res.body
5353
end
5454
end

modules/templates/templates_unattended_api.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,19 @@ class Proxy::TemplatesUnattendedApi < Sinatra::Base
1313
end
1414

1515
get "/:kind/:template/:hostgroup" do |kind, template, hostgroup|
16-
log_halt(500, "Failed to retrieve #{kind} hostgroup template for #{params.inspect}: ") do
16+
log_halt(nil, "Failed to retrieve #{kind} hostgroup template for #{params.inspect}: ") do
1717
Proxy::Templates::TemplateProxyRequest.new.get([kind, template, hostgroup], request.env, params)
1818
end
1919
end
2020

2121
get "/:kind" do |kind|
22-
log_halt(500, "Failed to proxy /#{kind} for #{params.inspect}: ") do
22+
log_halt(nil, "Failed to proxy /#{kind} for #{params.inspect}: ") do
2323
Proxy::Templates::TemplateProxyRequest.new.get([kind], request.env, params)
2424
end
2525
end
2626

2727
post "/:kind" do |kind|
28-
log_halt(500, "Failed to proxy /#{kind} for #{params.inspect}: ") do
28+
log_halt(nil, "Failed to proxy /#{kind} for #{params.inspect}: ") do
2929
params["Content-Type"] = "text/plain"
3030
Proxy::Templates::TemplateProxyRequest.new.post([kind], request.env, params, request.body.read)
3131
end

test/templates/template_proxy_request_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,22 @@ def test_template_requests_with_rhn_headers
8686
result = Proxy::Templates::TemplateProxyRequest.new.get('provision', @request_env, args)
8787
assert_equal(@expected_body, result)
8888
end
89+
90+
def test_post_status_code_from_foreman
91+
stub_request(:post, @foreman_url + '/unattended/built?token=test-token&url=' + @template_url).to_return(status: 401)
92+
error = assert_raises ::Proxy::Error::HttpError do
93+
Proxy::Templates::TemplateProxyRequest.new.post('built', @request_env, { :token => "test-token" }, "")
94+
end
95+
96+
assert_equal error.status_code, 401
97+
end
98+
99+
def test_get_status_code_from_foreman
100+
stub_request(:get, @foreman_url + '/unattended/built?token=test-token&url=' + @template_url).to_return(status: 401)
101+
error = assert_raises ::Proxy::Error::HttpError do
102+
Proxy::Templates::TemplateProxyRequest.new.get('built', @request_env, { :token => "test-token" })
103+
end
104+
105+
assert_equal error.status_code, 401
106+
end
89107
end

0 commit comments

Comments
 (0)