@@ -178,11 +178,13 @@ def get_installed_packages(self):
178178 LOG .trace (utils .get_exception_details ())
179179 self .installed_packages = []
180180
181- def _yum_install (self , package_names , enable_repos = [] ):
181+ def _yum_install (self , package_names ):
182182 try :
183- yum_cmd = 'yum install %s -y%s' % (
183+ yum_cmd = 'yum install %s -y %s %s' % (
184184 " " .join (package_names ),
185- "" .join ([" --enablerepo=%s" % r for r in enable_repos ]))
185+ "--setopt=strict=1" ,
186+ "--setopt=skip_missing_names_on_install=0"
187+ )
186188 self ._exec_cmd_chroot (yum_cmd )
187189 except exception .CoriolisException as err :
188190 raise exception .FailedPackageInstallationException (
@@ -204,56 +206,28 @@ def _yum_clean_all(self):
204206 if self ._test_path ('var/cache/yum' ):
205207 self ._exec_cmd_chroot ("rm -rf /var/cache/yum" )
206208
207- def _find_yum_repos (self , repos_to_enable = []):
208- """
209- Looks for required repositories passed as `repos_to_enable` in
210- /etc/yum.repos.d and returns the found repository names, so they can
211- be temporarily enabled when installing packages using yum.
212-
213- Yum only looks for repos in files with '.repo' extension, anything
214- else gets ignored, therefore this method should filter files by that
215- extension.
216-
217- Also, yum repository names might be different in some guest releases,
218- but still be similar. Therefore, repo name substrings should ideally be
219- passed in `repos_to_enable`. For example, we might be looking for repo
220- name 'ol7_latest', but the guest has it named as 'public_ol7_latest' in
221- the repo file.
222- """
223- found_repos = []
209+ def _get_repos_to_enable (self ):
210+ return []
224211
225- reposdir_path = 'etc/yum.repos.d'
212+ def enable_repos (self , repo_names ):
213+ """Enable repositories using subscription-manager for
214+ Red Hat Enterprise Linux.
226215
227- repofiles = [
228- f for f in self ._list_dir (reposdir_path ) if f .endswith ('.repo' )]
229- installed_repos = []
230- for file in repofiles :
231- path = os .path .join (reposdir_path , file )
232- try :
233- content = self ._read_file_sudo (path )
234- except Exception as e :
235- LOG .warning (
236- "Could not read yum repository file %s: %s" , path , e )
237- continue
238- for line in content .splitlines ():
239- m = re .match (r'^\[(.+)\]$' , line )
240- if m :
241- installed_repos .append (m .group (1 ))
242-
243- for repo in repos_to_enable :
244- available_repos = [ir for ir in installed_repos if repo in ir ]
245- available_repos .sort (key = len )
246- if available_repos :
247- found_repos .append (available_repos [0 ])
248- else :
249- LOG .warn (
250- "Could not find yum repository while searching for "
251- "repositories to enable: %s." , repo )
252-
253- return found_repos
216+ This method should be overridden by subclasses that use different
217+ repository management tools.
218+ """
219+ if not repo_names :
220+ return
254221
255- def _get_repos_to_enable (self ):
256- return []
222+ for repo in repo_names :
223+ cmd = 'subscription-manager repos --enable=%s' % repo
224+ try :
225+ self ._exec_cmd_chroot (cmd )
226+ LOG .info ("Enabled repository '%s' using subscription-manager" ,
227+ repo )
228+ except exception .CoriolisException :
229+ LOG .warning (f"Failed to enable repository { repo } . "
230+ f"Error was: { utils .get_exception_details ()} " )
257231
258232 def pre_packages_install (self , package_names ):
259233 super (BaseRedHatMorphingTools , self ).pre_packages_install (
@@ -271,8 +245,9 @@ def post_packages_install(self, package_names):
271245 package_names )
272246
273247 def install_packages (self , package_names ):
274- enable_repos = self ._get_repos_to_enable ()
275- self ._yum_install (package_names , enable_repos )
248+ repos_to_enable = self ._get_repos_to_enable ()
249+ self .enable_repos (repos_to_enable )
250+ self ._yum_install (package_names )
276251
277252 def uninstall_packages (self , package_names ):
278253 self ._yum_uninstall (package_names )
0 commit comments