2323 REPOFILE_SUFFIX ,
2424)
2525from leapp .models import RepositoryFile
26+ from leapp .libraries .common .config .version import get_source_major_version , get_target_major_version
2627
2728CL_MARKERS = ["cl-mysql" , "cl-mariadb" , "cl-percona" ]
2829MARIA_MARKERS = ["MariaDB" ]
2930MYSQL_MARKERS = ["mysql-community" ]
3031OLD_CLMYSQL_VERSIONS = ["5.0" , "5.1" ]
31- OLD_MYSQL_UPSTREAM_VERSIONS = ["5.7" , "5.6" , "5.5" ]
32+ OLD_MYSQL_UPSTREAM_VERSIONS_CL7 = ["5.7" , "5.6" , "5.5" ]
33+ OLD_MYSQL_UPSTREAM_VERSIONS_CL8 = ["5.7" , "5.6" ] # adjust as needed for CL8
3234
3335
3436def build_install_list (prefix ):
@@ -68,11 +70,13 @@ def construct_repomap_data(source_id, target_id):
6870 """
6971 Construct the repository mapping data.
7072 """
73+ source_major = get_source_major_version ()
74+ target_major = get_target_major_version ()
7175 return RepositoriesMapping (
7276 mapping = [RepoMapEntry (source = source_id , target = [target_id ])],
7377 repositories = [
74- make_pesid_repo (source_id , '7' , source_id ),
75- make_pesid_repo (target_id , '8' , target_id )
78+ make_pesid_repo (source_id , source_major , source_id ),
79+ make_pesid_repo (target_id , target_major , target_id )
7680 ]
7781 )
7882
@@ -108,24 +112,25 @@ def clmysql_process(self, repofile_name, repofile_data):
108112
109113 api .current_logger ().debug ("repoids from CloudLinux repofile {}: {}" .format (repofile_name , data_to_log ))
110114
111- cl8_repofile_list = []
115+ cl_target_repofile_list = []
116+ target_major = get_target_major_version ()
112117
113118 # Were any repositories enabled?
114119 for source_repo in repofile_data .data :
115120 # cl-mysql URLs look like this:
116121 # baseurl=http://repo.cloudlinux.com/other/cl$releasever/mysqlmeta/cl-mariadb-10.3/$basearch/
117122 # We don't want any duplicate repoid entries - they'd cause yum/dnf to fail.
118- # Make everything unique by adding -8 to the repoid.
123+ # Make everything unique by adding -<target_major> to the repoid.
119124 target_repo = copy .deepcopy (source_repo )
120- target_repo .repoid = target_repo .repoid + "-8"
125+ target_repo .repoid = "{}-{}" . format ( target_repo .repoid , target_major )
121126 # releasever may be something like 8.6, while only 8 is acceptable.
122- target_repo .baseurl = target_repo .baseurl .replace ("/cl$releasever/" , "/cl8/" )
127+ target_repo .baseurl = target_repo .baseurl .replace ("/cl$releasever/" , "/cl{}/" . format ( target_major ) )
123128
124- # Old CL MySQL versions (5.0 and 5.1) won't be available in CL8.
129+ # Old CL MySQL versions (5.0 and 5.1) won't be available in CL8+ .
125130 if any (ver in target_repo .baseurl for ver in OLD_CLMYSQL_VERSIONS ):
126131 reporting .create_report (
127132 [
128- reporting .Title ("An old CL-MySQL version will no longer be available in EL8" ),
133+ reporting .Title ("An old CL-MySQL version will no longer be available in EL{}" . format ( target_major ) ),
129134 reporting .Summary (
130135 "An old CloudLinux-provided MySQL version is installed on this system. "
131136 "It will no longer be available on the target system. "
@@ -149,7 +154,7 @@ def clmysql_process(self, repofile_name, repofile_data):
149154 # mysqlclient is usually disabled when installed from CL MySQL Governor.
150155 # However, it should be enabled for the Leapp upgrade, seeing as some packages
151156 # from it won't update otherwise.
152- if target_repo .enabled or target_repo .repoid == "mysqclient-8" :
157+ if target_repo .enabled or target_repo .repoid == "mysqclient-{}" . format ( target_major ) :
153158 api .current_logger ().debug ("Generating custom cl-mysql repo: {}" .format (target_repo .repoid ))
154159 self .custom_repo_msgs .append (
155160 CustomTargetRepository (
@@ -164,13 +169,13 @@ def clmysql_process(self, repofile_name, repofile_data):
164169 )
165170 # Gather the enabled repositories for the new repofile.
166171 # They'll be used to create a new custom repofile for the target userspace.
167- cl8_repofile_list .append (target_repo )
172+ cl_target_repofile_list .append (target_repo )
168173
169174 if any (repo .enabled for repo in repofile_data .data ):
170175 self .mysql_types .add ("cloudlinux" )
171176 # Provide the object with the modified repository data to the target userspace.
172- cl8_repofile_data = RepositoryFile (data = cl8_repofile_list , file = repofile_data .file )
173- leapp_repocopy = create_leapp_repofile_copy (cl8_repofile_data , repofile_name )
177+ cl_target_repofile_data = RepositoryFile (data = cl_target_repofile_list , file = repofile_data .file )
178+ leapp_repocopy = create_leapp_repofile_copy (cl_target_repofile_data , repofile_name )
174179 api .produce (CustomTargetRepositoryFile (file = leapp_repocopy ))
175180 else :
176181 api .current_logger ().debug ("No repos from CloudLinux repofile {} enabled, ignoring" .format (repofile_name ))
@@ -181,18 +186,27 @@ def mariadb_process(self, repofile_name, repofile_data):
181186
182187 Versions of MariaDB installed from https://mariadb.org/.
183188 """
184- cl8_repofile_list = []
189+ cl_target_repofile_list = []
190+ target_major = get_target_major_version ()
191+ source_major = get_source_major_version ()
185192
186193 for source_repo in repofile_data .data :
187194 # Maria URLs look like this:
188195 # baseurl = https://archive.mariadb.org/mariadb-10.3/yum/centos/7/x86_64
189196 # baseurl = https://archive.mariadb.org/mariadb-10.7/yum/centos7-ppc64/
190- # We want to replace the 7 in OS name after /yum/
197+ # We want to replace the source_major in OS name after /yum/ with target_major
191198 target_repo = copy .deepcopy (source_repo )
192- target_repo .repoid = target_repo .repoid + "-8"
193- url_parts = target_repo .baseurl .split ("yum" )
194- url_parts [1 ] = "yum" + url_parts [1 ].replace ("7" , "8" )
195- target_repo .baseurl = "" .join (url_parts )
199+ 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
196210
197211 if target_repo .enabled :
198212 api .current_logger ().debug ("Generating custom MariaDB repo: {}" .format (target_repo .repoid ))
@@ -207,14 +221,14 @@ def mariadb_process(self, repofile_name, repofile_data):
207221 self .mapping_msgs .append (
208222 construct_repomap_data (source_repo .repoid , target_repo .repoid )
209223 )
210- cl8_repofile_list .append (target_repo )
224+ cl_target_repofile_list .append (target_repo )
211225
212226 if any (repo .enabled for repo in repofile_data .data ):
213227 # Since MariaDB URLs have major versions written in, we need a new repo file
214228 # to feed to the target userspace.
215229 self .mysql_types .add ("mariadb" )
216- cl8_repofile_data = RepositoryFile (data = cl8_repofile_list , file = repofile_data .file )
217- leapp_repocopy = create_leapp_repofile_copy (cl8_repofile_data , repofile_name )
230+ cl_target_repofile_data = RepositoryFile (data = cl_target_repofile_list , file = repofile_data .file )
231+ leapp_repocopy = create_leapp_repofile_copy (cl_target_repofile_data , repofile_name )
218232 api .produce (CustomTargetRepositoryFile (file = leapp_repocopy ))
219233 else :
220234 api .current_logger ().debug ("No repos from MariaDB repofile {} enabled, ignoring" .format (repofile_name ))
@@ -225,25 +239,36 @@ def mysql_process(self, repofile_name, repofile_data):
225239
226240 Versions of MySQL installed from https://mysql.com/.
227241 """
228- cl8_repofile_list = []
242+ cl_target_repofile_list = []
243+ target_major = get_target_major_version ()
244+ source_major = get_source_major_version ()
245+
246+ # Select the correct list of old MySQL versions for the source major version
247+ if str (source_major ) == "7" :
248+ old_mysql_versions = OLD_MYSQL_UPSTREAM_VERSIONS_CL7
249+ else :
250+ old_mysql_versions = OLD_MYSQL_UPSTREAM_VERSIONS_CL8
229251
230252 for source_repo in repofile_data .data :
231253 # URLs look like this:
232254 # baseurl = https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/
233255 # Remember that we always want to modify names, to avoid "duplicate repository" errors.
234256 target_repo = copy .deepcopy (source_repo )
235- target_repo .repoid = target_repo .repoid + "-8"
236- target_repo .baseurl = target_repo .baseurl .replace ("/el/7/" , "/el/8/" )
257+ target_repo .repoid = "{}-{}" .format (target_repo .repoid , target_major )
258+ # Replace /el/<source_major>/ with /el/<target_major>/
259+ target_repo .baseurl = target_repo .baseurl .replace ("/el/{}/" .format (source_major ), "/el/{}/" .format (target_major ))
260+ # releasever may be something like 8.6, while only 8 is acceptable.
261+ target_repo .baseurl = target_repo .baseurl .replace ("/$releasever/" , "/{}/" .format (target_major ))
237262
238263 if target_repo .enabled :
239264 # MySQL package repos don't have these versions available for EL8 anymore.
240265 # There's only 8.0 available.
241266 # There'll be nothing to upgrade to.
242267 # CL repositories do provide them, though.
243- if any (ver in target_repo .name for ver in OLD_MYSQL_UPSTREAM_VERSIONS ):
268+ if any (ver in target_repo .name for ver in old_mysql_versions ):
244269 reporting .create_report (
245270 [
246- reporting .Title ("An old MySQL version will no longer be available in EL8" ),
271+ reporting .Title ("An old MySQL version will no longer be available in EL{}" . format ( target_major ) ),
247272 reporting .Summary (
248273 "A yum repository for an old MySQL version is enabled on this system. "
249274 "It will no longer be available on the target system. "
@@ -275,14 +300,14 @@ def mysql_process(self, repofile_name, repofile_data):
275300 self .mapping_msgs .append (
276301 construct_repomap_data (source_repo .repoid , target_repo .repoid )
277302 )
278- cl8_repofile_list .append (target_repo )
303+ cl_target_repofile_list .append (target_repo )
279304
280305 if any (repo .enabled for repo in repofile_data .data ):
281306 # MySQL typically has multiple repo files, so we want to make sure we're
282307 # adding the type to list only once.
283308 self .mysql_types .add ("mysql" )
284- cl8_repofile_data = RepositoryFile (data = cl8_repofile_list , file = repofile_data .file )
285- leapp_repocopy = create_leapp_repofile_copy (cl8_repofile_data , repofile_name )
309+ cl_target_repofile_data = RepositoryFile (data = cl_target_repofile_list , file = repofile_data .file )
310+ leapp_repocopy = create_leapp_repofile_copy (cl_target_repofile_data , repofile_name )
286311 api .produce (CustomTargetRepositoryFile (file = leapp_repocopy ))
287312 else :
288313 api .current_logger ().debug ("No repos from MySQL repofile {} enabled, ignoring" .format (repofile_name ))
0 commit comments