From 2e8b5e2d4f30854cce93d149fc7d24b9d9cfd02c Mon Sep 17 00:00:00 2001 From: Pavel Moravec 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/, which is confusing. Let remove the path from it also in case_id not supplied. Related to: #2764 Signed-off-by: Pavel Moravec --- 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 --- a/sos/policies/distros/redhat.py +++ b/sos/policies/distros/redhat.py @@ -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 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 --- 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 --- a/sos/policies/distros/redhat.py +++ b/sos/policies/distros/redhat.py @@ -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 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 --- 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 --- a/sos/policies/distros/__init__.py +++ b/sos/policies/distros/__init__.py @@ -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 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 --- 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 --- a/sos/collector/__init__.py +++ b/sos/collector/__init__.py @@ -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 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 --- 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 --- a/sos/policies/distros/redhat.py +++ b/sos/policies/distros/redhat.py @@ -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 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 --- 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 --- a/sos/policies/distros/__init__.py +++ b/sos/policies/distros/__init__.py @@ -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