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

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