Merge "Raise K8sResourceNotFound for all client methods"

This commit is contained in:
Zuul 2020-03-04 23:44:02 +00:00 committed by Gerrit Code Review
commit e7adb3a249
2 changed files with 40 additions and 29 deletions

View File

@ -76,6 +76,12 @@ class K8sClient(object):
else:
self.verify_server = ca_crt_file
def _raise_from_response(self, response):
if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
if not response.ok:
raise exc.K8sClientException(response.text)
def get(self, path, json=True, headers=None):
LOG.debug("Get %(path)s", {'path': path})
url = self._base_url + path
@ -87,10 +93,7 @@ class K8sClient(object):
response = self.session.get(url, cert=self.cert,
verify=self.verify_server,
headers=header)
if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
if not response.ok:
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
result = response.json() if json else response.text
return result
@ -113,9 +116,8 @@ class K8sClient(object):
response = self.session.patch(url, json={field: data},
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')
def patch_crd(self, field, path, data):
content_type = 'application/json-patch+json'
@ -132,9 +134,8 @@ class K8sClient(object):
response = self.session.patch(url, data=jsonutils.dumps(data),
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')
def patch_node_annotations(self, node, annotation_name, value):
content_type = 'application/json-patch+json'
@ -149,9 +150,8 @@ class K8sClient(object):
response = self.session.patch(url, data=jsonutils.dumps(data),
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')
def remove_node_annotations(self, node, annotation_name):
content_type = 'application/json-patch+json'
@ -164,9 +164,8 @@ class K8sClient(object):
response = self.session.patch(url, data=jsonutils.dumps(data),
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')
def post(self, path, body):
LOG.debug("Post %(path)s: %(body)s", {'path': path, 'body': body})
@ -177,9 +176,8 @@ class K8sClient(object):
response = self.session.post(url, json=body, cert=self.cert,
verify=self.verify_server, headers=header)
if response.ok:
return response.json()
raise exc.K8sClientException(response)
self._raise_from_response(response)
return response.json()
def delete(self, path):
LOG.debug("Delete %(path)s", {'path': path})
@ -191,12 +189,8 @@ class K8sClient(object):
response = self.session.delete(url, cert=self.cert,
verify=self.verify_server,
headers=header)
if response.ok:
return response.json()
else:
if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
raise exc.K8sClientException(response)
self._raise_from_response(response)
return response.json()
def annotate(self, path, annotations, resource_version=None):
"""Pushes a resource annotation to the K8s API resource
@ -245,10 +239,7 @@ class K8sClient(object):
% {'headers': response.headers,
'content': response.content, 'text': response.text})
if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
else:
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
def watch(self, path):
url = self._base_url + path

View File

@ -434,3 +434,23 @@ class TestK8sClient(test_base.TestCase):
self.assertRaises(exc.K8sClientException,
self.client.delete, path)
def test__raise_from_response(self):
m_resp = mock.MagicMock()
m_resp.ok = True
m_resp.status_code = 202
self.client._raise_from_response(m_resp)
def test__raise_from_response_404(self):
m_resp = mock.MagicMock()
m_resp.ok = False
m_resp.status_code = 404
self.assertRaises(exc.K8sResourceNotFound,
self.client._raise_from_response, m_resp)
def test__raise_from_response_500(self):
m_resp = mock.MagicMock()
m_resp.ok = False
m_resp.status_code = 500
self.assertRaises(exc.K8sClientException,
self.client._raise_from_response, m_resp)