Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit b794d87

Browse files
log k8s client errors when translating to ApiErrors in ApiClient
- for cloudfoundry/capi-k8s-release#48 this should make logging around route update 422s clearer [#173583970] Co-authored-by: Connor Braa <cbraa@pivotal.io> Co-authored-by: Piyali Banerjee <pbanerjee@pivotal.io>
1 parent fa2e0b4 commit b794d87

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

lib/kubernetes/api_client.rb

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def initialize(build_kube_client:, kpack_kube_client:, route_kube_client:)
1111
def create_image(resource_config)
1212
@build_kube_client.create_image(resource_config)
1313
rescue Kubeclient::HttpError => e
14+
logger.error('create_image', error: e.inspect, response: e.response, backtrace: e.backtrace)
1415
raise CloudController::Errors::ApiError.new_from_details('KpackImageError', 'create', e.message)
1516
end
1617

@@ -19,12 +20,14 @@ def get_image(name, namespace)
1920
rescue Kubeclient::ResourceNotFoundError
2021
nil
2122
rescue Kubeclient::HttpError => e
23+
logger.error('get_image', error: e.inspect, response: e.response, backtrace: e.backtrace)
2224
raise CloudController::Errors::ApiError.new_from_details('KpackImageError', 'get', e.message)
2325
end
2426

2527
def update_image(resource_config)
2628
@build_kube_client.update_image(resource_config)
2729
rescue Kubeclient::HttpError => e
30+
logger.error('update_image', error: e.inspect, response: e.response, backtrace: e.backtrace)
2831
raise CloudController::Errors::ApiError.new_from_details('KpackImageError', 'update', e.message)
2932
end
3033

@@ -33,12 +36,14 @@ def delete_image(name, namespace)
3336
rescue Kubeclient::ResourceNotFoundError
3437
nil
3538
rescue Kubeclient::HttpError => e
39+
logger.error('delete_image', error: e.inspect, response: e.response, backtrace: e.backtrace)
3640
raise CloudController::Errors::ApiError.new_from_details('KpackImageError', 'delete', e.message)
3741
end
3842

3943
def create_route(resource_config)
4044
@route_kube_client.create_route(resource_config)
4145
rescue Kubeclient::HttpError => e
46+
logger.error('create_route', error: e.inspect, response: e.response, backtrace: e.backtrace)
4247
error = CloudController::Errors::ApiError.new_from_details('KubernetesRouteResourceError', resource_name(resource_config))
4348
error.set_backtrace(e.backtrace)
4449
raise error
@@ -49,6 +54,7 @@ def get_route(name, namespace)
4954
rescue Kubeclient::ResourceNotFoundError
5055
nil
5156
rescue Kubeclient::HttpError => e
57+
logger.error('get_route', error: e.inspect, response: e.response, backtrace: e.backtrace)
5258
error = CloudController::Errors::ApiError.new_from_details('KubernetesRouteResourceError', name)
5359
error.set_backtrace(e.backtrace)
5460
raise error
@@ -57,7 +63,8 @@ def get_route(name, namespace)
5763
def update_route(resource_config)
5864
@route_kube_client.update_route(resource_config)
5965
rescue Kubeclient::HttpError => e
60-
error = CloudController::Errors::ApiError.new_from_details('KubernetesRouteResourceError', resource_name(resource_config))
66+
logger.error('update_route', error: e.inspect, response: e.response, backtrace: e.backtrace)
67+
error = CloudController::Errors::ApiError.new_from_details('KubernetesRouteResourceError', resource_name(resource_config), e.message, e.response)
6168
error.set_backtrace(e.backtrace)
6269
raise error
6370
end
@@ -67,6 +74,7 @@ def delete_route(name, namespace)
6774
rescue Kubeclient::ResourceNotFoundError
6875
nil
6976
rescue Kubeclient::HttpError => e
77+
logger.error('delete_route', error: e.inspect, response: e.response, backtrace: e.backtrace)
7078
error = CloudController::Errors::ApiError.new_from_details('KubernetesRouteResourceError', name)
7179
error.set_backtrace(e.backtrace)
7280
raise error
@@ -77,11 +85,18 @@ def get_custom_builder(name, namespace)
7785
rescue Kubeclient::ResourceNotFoundError
7886
nil
7987
rescue Kubeclient::HttpError => e
80-
raise CloudController::Errors::ApiError.new_from_details('KpackCustomBuilderError', 'get', e.message)
88+
logger.error('get_custom_builder', error: e.inspect, response: e.response, backtrace: e.backtrace)
89+
error = CloudController::Errors::ApiError.new_from_details('KpackCustomBuilderError', 'get', e.message)
90+
error.set_backtrace(e.backtrace)
91+
raise error
8192
end
8293

8394
private
8495

96+
def logger
97+
Steno.logger('kubernetes.api_client')
98+
end
99+
85100
def resource_name(resource_config)
86101
resource_metadata = resource_config.to_hash.symbolize_keys[:metadata] || {}
87102
resource_metadata.fetch(:name, '')

spec/unit/lib/kubernetes/api_client_spec.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,18 @@
199199
end
200200

201201
context 'when there is an error' do
202-
it 'raises as an ApiError' do
203-
allow(route_kube_client).to receive(:get_route).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar'))
202+
let(:error) { Kubeclient::HttpError.new(422, 'foo', 'bar') }
203+
let(:logger) { instance_double(Steno::Logger, error: nil) }
204+
before do
205+
allow(route_kube_client).to receive(:get_route).and_raise(error)
206+
allow(Steno).to receive(:logger).and_return(logger)
207+
end
204208

209+
it 'raises as an ApiError' do
205210
expect {
206211
subject.get_route('resource-name', 'namespace')
207212
}.to raise_error(CloudController::Errors::ApiError, /resource-name/)
213+
expect(logger).to have_received(:error).with('get_route', error: /status code/, response: error.response, backtrace: error.backtrace)
208214
end
209215
end
210216
end
@@ -224,8 +230,11 @@
224230
end
225231

226232
context 'when there is an error' do
233+
let(:error) { Kubeclient::HttpError.new(422, 'foo', 'bar') }
234+
let(:logger) { instance_double(Steno::Logger, error: nil) }
227235
before do
228-
allow(route_kube_client).to receive(:update_route).and_raise(Kubeclient::HttpError.new(422, 'foo', 'bar'))
236+
allow(route_kube_client).to receive(:update_route).and_raise(error)
237+
allow(Steno).to receive(:logger).and_return(logger)
229238
end
230239

231240
context 'when the config is a Kubeclient::Resource' do
@@ -235,6 +244,7 @@
235244
expect {
236245
subject.update_route(resource_config)
237246
}.to raise_error(CloudController::Errors::ApiError, /resource-name/)
247+
expect(logger).to have_received(:error).with('update_route', error: /status code/, response: error.response, backtrace: error.backtrace)
238248
end
239249
end
240250

0 commit comments

Comments
 (0)