From f29e7b9c810829c93bd1e067de3273c8c53d0e24 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Thu, 23 Jul 2020 14:50:35 -0400 Subject: [PATCH] properly report 30x errors on credential plugin tests --- awx/main/credential_plugins/aim.py | 4 ++-- awx/main/credential_plugins/conjur.py | 6 +++--- awx/main/credential_plugins/hashivault.py | 6 +++--- awx/main/credential_plugins/plugin.py | 10 ++++++++++ 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/awx/main/credential_plugins/aim.py b/awx/main/credential_plugins/aim.py index 5853f8305f..7c99665bf0 100644 --- a/awx/main/credential_plugins/aim.py +++ b/awx/main/credential_plugins/aim.py @@ -1,4 +1,4 @@ -from .plugin import CredentialPlugin, CertFiles +from .plugin import CredentialPlugin, CertFiles, raise_for_status from urllib.parse import quote, urlencode, urljoin @@ -84,7 +84,7 @@ def aim_backend(**kwargs): verify=verify, allow_redirects=False, ) - res.raise_for_status() + raise_for_status(res) return res.json()['Content'] diff --git a/awx/main/credential_plugins/conjur.py b/awx/main/credential_plugins/conjur.py index 286600dd1d..59bc0fbaef 100644 --- a/awx/main/credential_plugins/conjur.py +++ b/awx/main/credential_plugins/conjur.py @@ -1,4 +1,4 @@ -from .plugin import CredentialPlugin, CertFiles +from .plugin import CredentialPlugin, CertFiles, raise_for_status import base64 from urllib.parse import urljoin, quote_plus @@ -69,7 +69,7 @@ def conjur_backend(**kwargs): urljoin(url, '/'.join(['authn', account, username, 'authenticate'])), **auth_kwargs ) - resp.raise_for_status() + raise_for_status(resp) token = base64.b64encode(resp.content).decode('utf-8') lookup_kwargs = { @@ -90,7 +90,7 @@ def conjur_backend(**kwargs): with CertFiles(cacert) as cert: lookup_kwargs['verify'] = cert resp = requests.get(path, timeout=30, **lookup_kwargs) - resp.raise_for_status() + raise_for_status(resp) return resp.text diff --git a/awx/main/credential_plugins/hashivault.py b/awx/main/credential_plugins/hashivault.py index 47ee73e6ad..2658607a8e 100644 --- a/awx/main/credential_plugins/hashivault.py +++ b/awx/main/credential_plugins/hashivault.py @@ -3,7 +3,7 @@ import os import pathlib from urllib.parse import urljoin -from .plugin import CredentialPlugin, CertFiles +from .plugin import CredentialPlugin, CertFiles, raise_for_status import requests from django.utils.translation import ugettext_lazy as _ @@ -125,7 +125,7 @@ def kv_backend(**kwargs): with CertFiles(cacert) as cert: request_kwargs['verify'] = cert response = sess.get(request_url, **request_kwargs) - response.raise_for_status() + raise_for_status(response) json = response.json() if api_version == 'v2': @@ -168,7 +168,7 @@ def ssh_backend(**kwargs): request_kwargs['verify'] = cert resp = sess.post(request_url, **request_kwargs) - resp.raise_for_status() + raise_for_status(resp) return resp.json()['data']['signed_key'] diff --git a/awx/main/credential_plugins/plugin.py b/awx/main/credential_plugins/plugin.py index def2676a02..fa5c770fd1 100644 --- a/awx/main/credential_plugins/plugin.py +++ b/awx/main/credential_plugins/plugin.py @@ -3,9 +3,19 @@ import tempfile from collections import namedtuple +from requests.exceptions import HTTPError + CredentialPlugin = namedtuple('CredentialPlugin', ['name', 'inputs', 'backend']) +def raise_for_status(resp): + resp.raise_for_status() + if resp.status_code >= 300: + exc = HTTPError() + setattr(exc, 'response', resp) + raise exc + + class CertFiles(): """ A context manager used for writing a certificate and (optional) key