Skip to content

Commit 22087da

Browse files
committed
CLOS-3490: Fix upstream mariadb upgrades
1 parent 1eb4fe1 commit 22087da

File tree

2 files changed

+114
-14
lines changed

2 files changed

+114
-14
lines changed

repos/system_upgrade/cloudlinux/actors/clmysqlrepositorysetup/libraries/clmysqlrepositorysetup.py

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,28 @@ def clmysql_process(self, repofile_name, repofile_data):
180180
else:
181181
api.current_logger().debug("No repos from CloudLinux repofile {} enabled, ignoring".format(repofile_name))
182182

183+
def _make_upgrade_mariadb_url(self, mariadb_url, source_major, target_major):
184+
"""
185+
Maria URLs look like this:
186+
baseurl = https://archive.mariadb.org/mariadb-10.3/yum/centos/7/x86_64
187+
baseurl = https://archive.mariadb.org/mariadb-10.7/yum/centos7-ppc64/
188+
baseurl = https://distrohub.kyiv.ua/mariadb/yum/11.8/rhel/$releasever/$basearch
189+
baseurl = https://mariadb.gb.ssimn.org/yum/12.0/centos/$releasever/$basearch
190+
baseurl = https://mariadb.gb.ssimn.org/yum/12.0/almalinux8-amd64/$releasever/$basearch
191+
We want to replace the parts of the url to make them work with target os version.
192+
"""
193+
194+
# Replace the first occurrence of source_major with target_major after 'yum'
195+
url_parts = mariadb_url.split("yum", 1)
196+
if len(url_parts) == 2:
197+
# Replace only the first digit (source_major) after 'yum'
198+
url_parts[1] = url_parts[1].replace(str(source_major), str(target_major), 1)
199+
return "yum".join(url_parts)
200+
else:
201+
# TODO: fix in https://cloudlinux.atlassian.net/browse/CLOS-3490
202+
api.current_logger().warning("Unsupported repository URL={}, skipping".format(mariadb_url))
203+
return
204+
183205
def mariadb_process(self, repofile_name, repofile_data):
184206
"""
185207
Process upstream MariaDB options.
@@ -191,22 +213,9 @@ def mariadb_process(self, repofile_name, repofile_data):
191213
source_major = get_source_major_version()
192214

193215
for source_repo in repofile_data.data:
194-
# Maria URLs look like this:
195-
# baseurl = https://archive.mariadb.org/mariadb-10.3/yum/centos/7/x86_64
196-
# baseurl = https://archive.mariadb.org/mariadb-10.7/yum/centos7-ppc64/
197-
# We want to replace the source_major in OS name after /yum/ with target_major
198216
target_repo = copy.deepcopy(source_repo)
199217
target_repo.repoid = "{}-{}".format(target_repo.repoid, target_major)
200-
# Replace the first occurrence of source_major with target_major after 'yum'
201-
url_parts = target_repo.baseurl.split("yum", 1)
202-
if len(url_parts) == 2:
203-
# Replace only the first digit (source_major) after 'yum'
204-
url_parts[1] = url_parts[1].replace(str(source_major), str(target_major), 1)
205-
target_repo.baseurl = "yum".join(url_parts)
206-
else:
207-
# TODO: fix in https://cloudlinux.atlassian.net/browse/CLOS-3490
208-
api.current_logger().warning("Unsupported repository URL={}, skipping".format(target_repo.baseurl))
209-
return
218+
target_repo.baseurl = self._make_upgrade_mariadb_url(source_repo.baseurl, source_major, target_major)
210219

211220
if target_repo.enabled:
212221
api.current_logger().debug("Generating custom MariaDB repo: {}".format(target_repo.repoid))
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import pytest
2+
3+
from leapp.libraries.actor import clmysqlrepositorysetup
4+
5+
6+
@pytest.mark.parametrize(
7+
"source_url,source_major,target_major,expected_url",
8+
[
9+
# Test cases from docstring
10+
(
11+
"https://archive.mariadb.org/mariadb-10.3/yum/centos/7/x86_64",
12+
7, 8,
13+
"https://archive.mariadb.org/mariadb-10.3/yum/centos/8/x86_64",
14+
),
15+
(
16+
"https://archive.mariadb.org/mariadb-10.7/yum/centos7-ppc64/",
17+
7, 8,
18+
"https://archive.mariadb.org/mariadb-10.7/yum/centos8-ppc64/",
19+
),
20+
(
21+
"https://distrohub.kyiv.ua/mariadb/yum/11.8/rhel/7/x86_64",
22+
7, 8,
23+
"https://distrohub.kyiv.ua/mariadb/yum/11.8/rhel/8/x86_64",
24+
),
25+
(
26+
"https://mariadb.gb.ssimn.org/yum/12.0/centos/7/x86_64",
27+
7, 8,
28+
"https://mariadb.gb.ssimn.org/yum/12.0/centos/8/x86_64",
29+
),
30+
(
31+
"https://mariadb.gb.ssimn.org/yum/12.0/almalinux8-amd64/",
32+
8, 9,
33+
"https://mariadb.gb.ssimn.org/yum/12.0/almalinux9-amd64/",
34+
),
35+
36+
# Test with trailing slash
37+
(
38+
"https://archive.mariadb.org/mariadb-10.3/yum/centos/7/x86_64/",
39+
7, 8,
40+
"https://archive.mariadb.org/mariadb-10.3/yum/centos/8/x86_64/",
41+
),
42+
43+
# Test cases based on SSIMN.org mirror patterns
44+
# RHEL patterns
45+
(
46+
"https://mariadb.gb.ssimn.org/yum/12.0/rhel8-amd64/",
47+
8, 9,
48+
"https://mariadb.gb.ssimn.org/yum/12.0/rhel9-amd64/",
49+
),
50+
51+
# Rocky Linux patterns
52+
(
53+
"https://mariadb.gb.ssimn.org/yum/12.0/rocky8-amd64/",
54+
8, 9,
55+
"https://mariadb.gb.ssimn.org/yum/12.0/rocky9-amd64/",
56+
),
57+
(
58+
"https://mariadb.gb.ssimn.org/yum/12.0/rockylinux8-amd64/",
59+
8, 9,
60+
"https://mariadb.gb.ssimn.org/yum/12.0/rockylinux9-amd64/",
61+
),
62+
63+
# Test cases that should return None and log warning
64+
(
65+
"https://example.com/mariadb/repo/centos/7/x86_64",
66+
7, 8,
67+
None,
68+
),
69+
(
70+
"https://example.com/mariadb/yum",
71+
7, 8,
72+
None,
73+
),
74+
(
75+
"",
76+
7, 8,
77+
None,
78+
),
79+
(
80+
None,
81+
7, 8,
82+
None,
83+
),
84+
]
85+
)
86+
def test_make_upgrade_mariadb_url(source_url, source_major, target_major, expected_url):
87+
"""Test URL transformation for various MariaDB repository URLs."""
88+
library = clmysqlrepositorysetup.MySqlRepositorySetupLibrary()
89+
result = library._make_upgrade_mariadb_url(source_url, source_major, target_major)
90+
91+
assert result == expected_url

0 commit comments

Comments
 (0)