Merge pull request #187 from fabianvf/dynamic-ignore-unavailable

Prevent 503s from killing the client during discovery
This commit is contained in:
Kubernetes Prow Robot 2020-09-14 18:49:25 -07:00 committed by GitHub
commit a5e529df63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -23,7 +23,7 @@ from abc import abstractmethod, abstractproperty
from urllib3.exceptions import ProtocolError, MaxRetryError
from kubernetes import __version__
from .exceptions import NotFoundError, ResourceNotFoundError, ResourceNotUniqueError, ApiException
from .exceptions import NotFoundError, ResourceNotFoundError, ResourceNotUniqueError, ApiException, ServiceUnavailableError
from .resource import Resource, ResourceList
@ -155,7 +155,10 @@ class Discoverer(object):
subresources = {}
path = '/'.join(filter(None, [prefix, group, version]))
resources_response = self.client.request('GET', path).resources or []
try:
resources_response = self.client.request('GET', path).resources or []
except ServiceUnavailableError:
resources_response = []
resources_raw = list(filter(lambda resource: '/' not in resource['name'], resources_response))
subresources_raw = list(filter(lambda resource: '/' in resource['name'], resources_response))
@ -251,13 +254,11 @@ class LazyDiscoverer(Discoverer):
# Check if we've requested resources for this group
if not resourcePart.resources:
prefix, group, version = reqParams[0], reqParams[1], part
try:
resourcePart.resources = self.get_resources_for_api_version(prefix,
group, part, resourcePart.preferred)
except NotFoundError:
raise ResourceNotFoundError
resourcePart.resources = self.get_resources_for_api_version(
prefix, group, part, resourcePart.preferred)
self._cache['resources'][prefix][group][version] = resourcePart
self.__update_cache=True
self.__update_cache = True
return self.__search(parts[1:], resourcePart.resources, reqParams)
elif isinstance(resourcePart, dict):
# In this case parts [0] will be a specified prefix, group, version