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,23 @@ 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 )
196206
197207            if  target_repo .enabled :
198208                api .current_logger ().debug ("Generating custom MariaDB repo: {}" .format (target_repo .repoid ))
@@ -207,14 +217,14 @@ def mariadb_process(self, repofile_name, repofile_data):
207217                self .mapping_msgs .append (
208218                    construct_repomap_data (source_repo .repoid , target_repo .repoid )
209219                )
210-                 cl8_repofile_list .append (target_repo )
220+                 cl_target_repofile_list .append (target_repo )
211221
212222        if  any (repo .enabled  for  repo  in  repofile_data .data ):
213223            # Since MariaDB URLs have major versions written in, we need a new repo file 
214224            # to feed to the target userspace. 
215225            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 )
226+             cl_target_repofile_data  =  RepositoryFile (data = cl_target_repofile_list , file = repofile_data .file )
227+             leapp_repocopy  =  create_leapp_repofile_copy (cl_target_repofile_data , repofile_name )
218228            api .produce (CustomTargetRepositoryFile (file = leapp_repocopy ))
219229        else :
220230            api .current_logger ().debug ("No repos from MariaDB repofile {} enabled, ignoring" .format (repofile_name ))
@@ -225,25 +235,36 @@ def mysql_process(self, repofile_name, repofile_data):
225235
226236        Versions of MySQL installed from https://mysql.com/. 
227237        """ 
228-         cl8_repofile_list  =  []
238+         cl_target_repofile_list  =  []
239+         target_major  =  get_target_major_version ()
240+         source_major  =  get_source_major_version ()
241+ 
242+         # Select the correct list of old MySQL versions for the source major version 
243+         if  str (source_major ) ==  "7" :
244+             old_mysql_versions  =  OLD_MYSQL_UPSTREAM_VERSIONS_CL7 
245+         else :
246+             old_mysql_versions  =  OLD_MYSQL_UPSTREAM_VERSIONS_CL8 
229247
230248        for  source_repo  in  repofile_data .data :
231249            # URLs look like this: 
232250            # baseurl = https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/ 
233251            # Remember that we always want to modify names, to avoid "duplicate repository" errors. 
234252            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/" )
253+             target_repo .repoid  =  "{}-{}" .format (target_repo .repoid , target_major )
254+             # Replace /el/<source_major>/ with /el/<target_major>/ 
255+             target_repo .baseurl  =  target_repo .baseurl .replace ("/el/{}/" .format (source_major ), "/el/{}/" .format (target_major ))
256+             # releasever may be something like 8.6, while only 8 is acceptable. 
257+             target_repo .baseurl  =  target_repo .baseurl .replace ("/$releasever/" , "/{}/" .format (target_major ))
237258
238259            if  target_repo .enabled :
239260                # MySQL package repos don't have these versions available for EL8 anymore. 
240261                # There's only 8.0 available. 
241262                # There'll be nothing to upgrade to. 
242263                # CL repositories do provide them, though. 
243-                 if  any (ver  in  target_repo .name  for  ver  in  OLD_MYSQL_UPSTREAM_VERSIONS ):
264+                 if  any (ver  in  target_repo .name  for  ver  in  old_mysql_versions ):
244265                    reporting .create_report (
245266                        [
246-                             reporting .Title ("An old MySQL version will no longer be available in EL8"  ),
267+                             reporting .Title ("An old MySQL version will no longer be available in EL{}"  . format ( target_major ) ),
247268                            reporting .Summary (
248269                                "A yum repository for an old MySQL version is enabled on this system. " 
249270                                "It will no longer be available on the target system. " 
@@ -275,14 +296,14 @@ def mysql_process(self, repofile_name, repofile_data):
275296                self .mapping_msgs .append (
276297                    construct_repomap_data (source_repo .repoid , target_repo .repoid )
277298                )
278-                 cl8_repofile_list .append (target_repo )
299+                 cl_target_repofile_list .append (target_repo )
279300
280301        if  any (repo .enabled  for  repo  in  repofile_data .data ):
281302            # MySQL typically has multiple repo files, so we want to make sure we're 
282303            # adding the type to list only once. 
283304            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 )
305+             cl_target_repofile_data  =  RepositoryFile (data = cl_target_repofile_list , file = repofile_data .file )
306+             leapp_repocopy  =  create_leapp_repofile_copy (cl_target_repofile_data , repofile_name )
286307            api .produce (CustomTargetRepositoryFile (file = leapp_repocopy ))
287308        else :
288309            api .current_logger ().debug ("No repos from MySQL repofile {} enabled, ignoring" .format (repofile_name ))
0 commit comments