Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reraise Excon errors as K8s::Errors #163

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/k8s/error.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
module K8s
# Top-level class for all errors raised by this gem.
class Error < StandardError
Transport = Class.new(Error).freeze
SSL = Class.new(Transport).freeze
Socket = Class.new(Transport).freeze

# Kube API error, related to a HTTP response with a non-2xx code
class API < Error
extend Forwardable
Expand Down
1 change: 0 additions & 1 deletion lib/k8s/resource_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,6 @@ def meta_list(labelSelector: nil, fieldSelector: nil, namespace: @namespace)
# @param resourceVersion [nil, String]
# @param timeout [nil, Integer]
# @yield [K8S::WatchEvent]
# @raise [Excon::Error]
def watch(labelSelector: nil, fieldSelector: nil, resourceVersion: nil, timeout: nil, namespace: @namespace)
method = 'GET'
path = path(namespace: namespace)
Expand Down
10 changes: 9 additions & 1 deletion lib/k8s/transport.rb
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ def build_excon
headers: REQUEST_HEADERS,
**@options
)
rescue Excon::Error => e
raise K8s::Error::Transport, "#{e.message} (#{e.class})"
end

# @param parts [Array<String>] join path parts together to build the full URL
Expand Down Expand Up @@ -227,7 +229,6 @@ def format_request(options)
# @param request_options [Hash] as passed to Excon#request
# @param response_class [Class] coerce into response body using #new
# @raise [K8s::Error]
# @raise [Excon::Error] TODO: wrap
# @return [response_class, Hash]
def parse_response(response, request_options, response_class: K8s::Resource)
method = request_options[:method]
Expand Down Expand Up @@ -270,6 +271,7 @@ def parse_response(response, request_options, response_class: K8s::Resource)
# @param response_class [Class] coerce into response class using #new
# @param options [Hash] @see Excon#request
# @return [response_class, Hash]
# @raise [K8s::Error::SSL, K8s::Error::Socket, K8s::Error::Transport, K8s::Error::API]
def request(response_class: K8s::Resource, **options)
if options[:method] == 'DELETE' && need_delete_body?
options[:request_object] = options.delete(:query)
Expand All @@ -283,6 +285,12 @@ def request(response_class: K8s::Resource, **options)
t = Time.now - start

obj = options[:response_block] ? {} : parse_response(response, options, response_class: response_class)
rescue Excon::Error::Certificate, Excon::Errors::CertificateError => e
raise K8s::Error::SSL, "#{e.socket_error.message} (#{e.socket_error.class})"
rescue Excon::Error::Socket, Excon::Errors::SocketError => e
raise K8s::Error::Socket, "#{e.socket_error.message} (#{e.socket_error.class})"
rescue Excon::Error => e
raise K8s::Error::Transport, "#{e.message} (#{e.class})"
rescue K8s::Error::API => e
logger.warn { "#{format_request(options)} => HTTP #{e.code} #{e.reason} in #{'%.3f' % t}s" }
logger.debug { "Request: #{excon_options[:body]}" } if excon_options[:body]
Expand Down