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