]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: validate that the constructed YumDnf baseurl is usable
authorJohn Mulligan <jmulligan@redhat.com>
Thu, 20 Jan 2022 19:48:28 +0000 (14:48 -0500)
committerAdam King <adking@redhat.com>
Fri, 28 Jan 2022 16:31:17 +0000 (11:31 -0500)
If the inputs to the `cephadm add-repo` command would result in an
invalid URL for repo metadata fail the command early with a (somewhat)
helpful error.

Fixes: https://tracker.ceph.com/issues/46773
Signed-off-by: John Mulligan <jmulligan@redhat.com>
src/cephadm/cephadm

index 563aeb5e097da86a2ee05564af3694d7634cd248..10b608fe139e51dc540fe9e0a03fcbb9e3a56a63 100755 (executable)
@@ -6988,6 +6988,18 @@ class YumDnf(Packager):
             if self.version and self.version.split('.')[0] >= '16':
                 raise Error('Ceph does not support 16.y.z or later for this version of this linux distro and therefore cannot add a repo for it')
 
+        if self.stable or self.version:
+            # we know that yum & dnf require there to be a
+            # $base_url/$arch/repodata/repomd.xml so we can test if this URL
+            # is gettable in order to validate the inputs
+            test_url = self.repo_baseurl() + '/noarch/repodata/repomd.xml'
+            try:
+                urlopen(test_url)
+            except HTTPError as err:
+                logger.error('unable to fetch repo metadata: %r', err)
+                raise Error('failed to fetch repository metadata. please check'
+                            ' the provided parameters are correct and try again')
+
     def add_repo(self) -> None:
         if self.stable or self.version:
             content = ''