From 2331c0f9c51232de5c33ad7c71a2161b46ee69ce Mon Sep 17 00:00:00 2001 From: John Mulligan Date: Thu, 20 Jan 2022 14:48:28 -0500 Subject: [PATCH] cephadm: validate that the constructed YumDnf baseurl is usable 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 --- src/cephadm/cephadm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 563aeb5e097da..10b608fe139e5 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -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 = '' -- 2.39.5