Blame SOURCES/sos-bz2025611-RHTS-api-change.patch

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