| From 2e8b5e2d4f30854cce93d149fc7d24b9d9cfd02c Mon Sep 17 00:00:00 2001 |
| From: Pavel Moravec <pmoravec@redhat.com> |
| Date: Fri, 19 Nov 2021 16:16:07 +0100 |
| Subject: [PATCH 1/3] [policies] strip path from SFTP upload filename |
| |
| When case_id is not supplied, we ask SFTP server to store the uploaded |
| file under name /var/tmp/<tarball>, which is confusing. |
| |
| Let remove the path from it also in case_id not supplied. |
| |
| Related to: #2764 |
| |
| Signed-off-by: Pavel Moravec <pmoravec@redhat.com> |
| |
| sos/policies/distros/redhat.py | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/sos/policies/distros/redhat.py b/sos/policies/distros/redhat.py |
| index 3476e21fb..8817fc785 100644 |
| |
| |
| @@ -269,10 +269,10 @@ def _get_sftp_upload_name(self): |
| """The RH SFTP server will only automatically connect file uploads to |
| cases if the filename _starts_ with the case number |
| """ |
| + fname = self.upload_archive_name.split('/')[-1] |
| if self.case_id: |
| - return "%s_%s" % (self.case_id, |
| - self.upload_archive_name.split('/')[-1]) |
| - return self.upload_archive_name |
| + return "%s_%s" % (self.case_id, fname) |
| + return fname |
| |
| def upload_sftp(self): |
| """Override the base upload_sftp to allow for setting an on-demand |
| |
| From 61023b29a656dd7afaa4a0643368b0a53f1a3779 Mon Sep 17 00:00:00 2001 |
| From: Pavel Moravec <pmoravec@redhat.com> |
| Date: Fri, 19 Nov 2021 17:31:31 +0100 |
| Subject: [PATCH 2/3] [redhat] update SFTP API version to v2 |
| |
| Change API version from v1 to v2, which includes: |
| - change of URL |
| - different URI |
| - POST method for token generation instead of GET |
| |
| Resolves: #2764 |
| |
| Signed-off-by: Pavel Moravec <pmoravec@redhat.com> |
| |
| sos/policies/distros/redhat.py | 10 +++++----- |
| 1 file changed, 5 insertions(+), 5 deletions(-) |
| |
| diff --git a/sos/policies/distros/redhat.py b/sos/policies/distros/redhat.py |
| index 8817fc785..e4e2b8835 100644 |
| |
| |
| @@ -175,7 +175,7 @@ def get_tmp_dir(self, opt_tmp_dir): |
| No changes will be made to system configuration. |
| """ |
| |
| -RH_API_HOST = "https://access.redhat.com" |
| +RH_API_HOST = "https://api.access.redhat.com" |
| RH_SFTP_HOST = "sftp://sftp.access.redhat.com" |
| |
| |
| @@ -287,12 +287,12 @@ def upload_sftp(self): |
| " for obtaining SFTP auth token.") |
| _token = None |
| _user = None |
| + url = RH_API_HOST + '/support/v2/sftp/token' |
| # we have a username and password, but we need to reset the password |
| # to be the token returned from the auth endpoint |
| if self.get_upload_user() and self.get_upload_password(): |
| - url = RH_API_HOST + '/hydra/rest/v1/sftp/token' |
| auth = self.get_upload_https_auth() |
| - ret = requests.get(url, auth=auth, timeout=10) |
| + ret = requests.post(url, auth=auth, timeout=10) |
| if ret.status_code == 200: |
| # credentials are valid |
| _user = self.get_upload_user() |
| @@ -302,8 +302,8 @@ def upload_sftp(self): |
| "credentials. Will try anonymous.") |
| # we either do not have a username or password/token, or both |
| if not _token: |
| - aurl = RH_API_HOST + '/hydra/rest/v1/sftp/token?isAnonymous=true' |
| - anon = requests.get(aurl, timeout=10) |
| + adata = {"isAnonymous": True} |
| + anon = requests.post(url, data=json.dumps(adata), timeout=10) |
| if anon.status_code == 200: |
| resp = json.loads(anon.text) |
| _user = resp['username'] |
| |
| From 267da2156ec61f526dd28e760ff6528408a76c3f Mon Sep 17 00:00:00 2001 |
| From: Pavel Moravec <pmoravec@redhat.com> |
| Date: Mon, 22 Nov 2021 15:22:32 +0100 |
| Subject: [PATCH 3/3] [policies] Deal 200 return code as success |
| |
| Return code 200 of POST method request must be dealt as success. |
| |
| Newly required due to the SFTP API change using POST. |
| |
| Related to: #2764 |
| |
| Signed-off-by: Pavel Moravec <pmoravec@redhat.com> |
| |
| sos/policies/distros/__init__.py | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/sos/policies/distros/__init__.py b/sos/policies/distros/__init__.py |
| index 0906fa779..6f257fdce 100644 |
| |
| |
| @@ -551,7 +551,7 @@ def upload_https(self): |
| r = self._upload_https_put(arc, verify) |
| else: |
| r = self._upload_https_post(arc, verify) |
| - if r.status_code != 201: |
| + if r.status_code != 200 and r.status_code != 201: |
| if r.status_code == 401: |
| raise Exception( |
| "Authentication failed: invalid user credentials" |
| From 8da1b14246226792c160dd04e5c7c75dd4e8d44b Mon Sep 17 00:00:00 2001 |
| From: Pavel Moravec <pmoravec@redhat.com> |
| Date: Mon, 22 Nov 2021 10:44:09 +0100 |
| Subject: [PATCH] [collect] fix moved get_upload_url under Policy class |
| |
| SoSCollector does not further declare get_upload_url method |
| as that was moved under Policy class(es). |
| |
| Resolves: #2766 |
| |
| Signed-off-by: Pavel Moravec <pmoravec@redhat.com> |
| |
| sos/collector/__init__.py | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py |
| index 50183e873..42a7731d6 100644 |
| |
| |
| @@ -1219,7 +1219,7 @@ this utility or remote systems that it c |
| msg = 'No sosreports were collected, nothing to archive...' |
| self.exit(msg, 1) |
| |
| - if self.opts.upload and self.get_upload_url(): |
| + if self.opts.upload and self.policy.get_upload_url(): |
| try: |
| self.policy.upload_archive(arc_name) |
| self.ui_log.info("Uploaded archive successfully") |
| From abb2fc65bd14760021c61699ad3113cab3bd4c64 Mon Sep 17 00:00:00 2001 |
| From: Pavel Moravec <pmoravec@redhat.com> |
| Date: Tue, 30 Nov 2021 11:37:02 +0100 |
| Subject: [PATCH 1/2] [redhat] Fix broken URI to upload to customer portal |
| |
| Revert back the unwanted change in URI of uploading tarball to the |
| Red Hat Customer portal. |
| |
| Related: #2772 |
| |
| Signed-off-by: Pavel Moravec <pmoravec@redhat.com> |
| |
| sos/policies/distros/redhat.py | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/sos/policies/distros/redhat.py b/sos/policies/distros/redhat.py |
| index e4e2b883..eb442407 100644 |
| |
| |
| @@ -250,7 +250,7 @@ support representative. |
| elif self.commons['cmdlineopts'].upload_protocol == 'sftp': |
| return RH_SFTP_HOST |
| else: |
| - rh_case_api = "/hydra/rest/cases/%s/attachments" |
| + rh_case_api = "/support/v1/cases/%s/attachments" |
| return RH_API_HOST + rh_case_api % self.case_id |
| |
| def _get_upload_headers(self): |
| -- |
| 2.31.1 |
| |
| |
| From ea4f9e88a412c80a4791396e1bb78ac1e24ece14 Mon Sep 17 00:00:00 2001 |
| From: Pavel Moravec <pmoravec@redhat.com> |
| Date: Tue, 30 Nov 2021 13:00:26 +0100 |
| Subject: [PATCH 2/2] [policy] Add error message when FTP upload write failure |
| |
| When (S)FTP upload fails to write the destination file, |
| our "expect" code should detect it sooner than after timeout happens |
| and write appropriate error message. |
| |
| Resolves: #2772 |
| |
| Signed-off-by: Pavel Moravec <pmoravec@redhat.com> |
| |
| sos/policies/distros/__init__.py | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| diff --git a/sos/policies/distros/__init__.py b/sos/policies/distros/__init__.py |
| index 6f257fdc..7bdc81b8 100644 |
| |
| |
| @@ -473,7 +473,8 @@ class LinuxPolicy(Policy): |
| put_expects = [ |
| u'100%', |
| pexpect.TIMEOUT, |
| - pexpect.EOF |
| + pexpect.EOF, |
| + u'No such file or directory' |
| ] |
| |
| put_success = ret.expect(put_expects, timeout=180) |
| @@ -485,6 +486,8 @@ class LinuxPolicy(Policy): |
| raise Exception("Timeout expired while uploading") |
| elif put_success == 2: |
| raise Exception("Unknown error during upload: %s" % ret.before) |
| + elif put_success == 3: |
| + raise Exception("Unable to write archive to destination") |
| else: |
| raise Exception("Unexpected response from server: %s" % ret.before) |
| |
| -- |
| 2.31.1 |
| |