Merge branch 'fix-kube_client-proxy_url-exception' into 'master'
Rescue Kubeclient::HttpError when generating prometheus_client See merge request gitlab-org/gitlab-ce!18989
This commit is contained in:
commit
338979701b
4 changed files with 36 additions and 0 deletions
|
@ -49,6 +49,11 @@ module Clusters
|
|||
# ensures headers containing auth data are appended to original k8s client options
|
||||
options = kube_client.rest_client.options.merge(headers: kube_client.headers)
|
||||
RestClient::Resource.new(proxy_url, options)
|
||||
rescue Kubeclient::HttpError
|
||||
# If users have mistakenly set parameters or removed the depended clusters,
|
||||
# `proxy_url` could raise an exception because gitlab can not communicate with the cluster.
|
||||
# Since `PrometheusAdapter#can_query?` is eargely loaded on environement pages in gitlab,
|
||||
# we need to silence the exceptions
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix corrupted environment pages with unathorized proxy url
|
||||
merge_request: 18989
|
||||
author:
|
||||
type: fixed
|
|
@ -42,6 +42,22 @@ feature 'Environments page', :js do
|
|||
expect(page).to have_content('You don\'t have any environments right now')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when cluster is not reachable' do
|
||||
let!(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
|
||||
let!(:application_prometheus) { create(:clusters_applications_prometheus, :installed, cluster: cluster) }
|
||||
|
||||
before do
|
||||
allow_any_instance_of(Kubeclient::Client).to receive(:proxy_url).and_raise(Kubeclient::HttpError.new(401, 'Unauthorized', nil))
|
||||
end
|
||||
|
||||
it 'should show one environment without error' do
|
||||
visit_environments(project, scope: 'available')
|
||||
|
||||
expect(page).to have_css('.environments-container')
|
||||
expect(page.all('.environment-name').length).to eq(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'with one stopped environment' do
|
||||
|
|
|
@ -85,6 +85,16 @@ describe Clusters::Applications::Prometheus do
|
|||
it 'copies options and headers from kube client to proxy client' do
|
||||
expect(subject.prometheus_client.options).to eq(kube_client.rest_client.options.merge(headers: kube_client.headers))
|
||||
end
|
||||
|
||||
context 'when cluster is not reachable' do
|
||||
before do
|
||||
allow(kube_client).to receive(:proxy_url).and_raise(Kubeclient::HttpError.new(401, 'Unauthorized', nil))
|
||||
end
|
||||
|
||||
it 'returns nil' do
|
||||
expect(subject.prometheus_client).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue