yum: use envra instead of nevra (#28284)

This commit is contained in:
Martin Krizek 2017-08-29 19:26:42 +02:00 committed by ansibot
commit e4ea999e6d

View file

@ -274,7 +274,7 @@ from ansible.module_utils.urls import fetch_url
# 64k. Number of bytes to read at a time when manually downloading pkgs via a url # 64k. Number of bytes to read at a time when manually downloading pkgs via a url
BUFSIZE = 65536 BUFSIZE = 65536
def_qf = "%{name}-%{version}-%{release}.%{arch}" def_qf = "%{epoch}:%{name}-%{version}-%{release}.%{arch}"
rpmbin = None rpmbin = None
@ -335,12 +335,11 @@ def fetch_rpm_from_url(spec, module=None):
module.fail_json(msg="Failure downloading %s, %s" % (spec, e)) module.fail_json(msg="Failure downloading %s, %s" % (spec, e))
return package_file.name return package_file.name
def po_to_nevra(po): def po_to_envra(po):
if hasattr(po, 'ui_envra'):
if hasattr(po, 'ui_nevra'): return po.ui_envra
return po.ui_nevra
else: else:
return '%s-%s-%s.%s' % (po.name, po.version, po.release, po.arch) return '%s:%s-%s-%s.%s' % (po.epoch, po.name, po.version, po.release, po.arch)
def is_group_installed(name): def is_group_installed(name):
@ -377,7 +376,7 @@ def is_installed(module, repoq, pkgspec, conf_file, qf=def_qf, en_repos=None, di
e = get_exception() e = get_exception()
module.fail_json(msg="Failure talking to yum: %s" % e) module.fail_json(msg="Failure talking to yum: %s" % e)
return [po_to_nevra(p) for p in pkgs] return [po_to_envra(p) for p in pkgs]
else: else:
global rpmbin global rpmbin
@ -438,7 +437,7 @@ def is_available(module, repoq, pkgspec, conf_file, qf=def_qf, en_repos=None, di
e = get_exception() e = get_exception()
module.fail_json(msg="Failure talking to yum: %s" % e) module.fail_json(msg="Failure talking to yum: %s" % e)
return [po_to_nevra(p) for p in pkgs] return [po_to_envra(p) for p in pkgs]
else: else:
myrepoq = list(repoq) myrepoq = list(repoq)
@ -490,7 +489,7 @@ def is_update(module, repoq, pkgspec, conf_file, qf=def_qf, en_repos=None, dis_r
if pkg in updates: if pkg in updates:
retpkgs.append(pkg) retpkgs.append(pkg)
return set([po_to_nevra(p) for p in retpkgs]) return set([po_to_envra(p) for p in retpkgs])
else: else:
myrepoq = list(repoq) myrepoq = list(repoq)
@ -538,7 +537,7 @@ def what_provides(module, repoq, req_spec, conf_file, qf=def_qf, en_repos=None,
e = get_exception() e = get_exception()
module.fail_json(msg="Failure talking to yum: %s" % e) module.fail_json(msg="Failure talking to yum: %s" % e)
return set([po_to_nevra(p) for p in pkgs]) return set([po_to_envra(p) for p in pkgs])
else: else:
myrepoq = list(repoq) myrepoq = list(repoq)
@ -602,8 +601,8 @@ def transaction_exists(pkglist):
break break
return conflicts return conflicts
def local_nvra(module, path): def local_envra(module, path):
"""return nvra of a local rpm passed in""" """return envra of a local rpm passed in"""
ts = rpm.TransactionSet() ts = rpm.TransactionSet()
ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
@ -613,10 +612,11 @@ def local_nvra(module, path):
finally: finally:
os.close(fd) os.close(fd)
return '%s-%s-%s.%s' % (header[rpm.RPMTAG_NAME], return '%s:%s-%s-%s.%s' % (header[rpm.RPMTAG_EPOCH],
header[rpm.RPMTAG_VERSION], header[rpm.RPMTAG_NAME],
header[rpm.RPMTAG_RELEASE], header[rpm.RPMTAG_VERSION],
header[rpm.RPMTAG_ARCH]) header[rpm.RPMTAG_RELEASE],
header[rpm.RPMTAG_ARCH])
def pkg_to_dict(pkgstr): def pkg_to_dict(pkgstr):
@ -632,7 +632,7 @@ def pkg_to_dict(pkgstr):
'release':r, 'release':r,
'version':v, 'version':v,
'repo':repo, 'repo':repo,
'nevra': '%s:%s-%s-%s.%s' % (e, n, v, r, a) 'envra': '%s:%s-%s-%s.%s' % (e, n, v, r, a)
} }
if repo == 'installed': if repo == 'installed':
@ -738,10 +738,10 @@ def install(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos, i
res['rc'] = 127 # Ensure the task fails in with-loop res['rc'] = 127 # Ensure the task fails in with-loop
module.fail_json(**res) module.fail_json(**res)
nvra = local_nvra(module, spec) envra = local_envra(module, spec)
# look for them in the rpmdb # look for them in the rpmdb
if is_installed(module, repoq, nvra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot): if is_installed(module, repoq, envra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot):
# if they are there, skip it # if they are there, skip it
continue continue
pkg = spec pkg = spec
@ -750,8 +750,8 @@ def install(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos, i
elif '://' in spec: elif '://' in spec:
# download package so that we can check if it's already installed # download package so that we can check if it's already installed
package = fetch_rpm_from_url(spec, module=module) package = fetch_rpm_from_url(spec, module=module)
nvra = local_nvra(module, package) envra = local_envra(module, package)
if is_installed(module, repoq, nvra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot): if is_installed(module, repoq, envra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot):
# if it's there, skip it # if it's there, skip it
continue continue
pkg = package pkg = package
@ -1008,11 +1008,11 @@ def latest(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos, in
res['rc'] = 127 # Ensure the task fails in with-loop res['rc'] = 127 # Ensure the task fails in with-loop
module.fail_json(**res) module.fail_json(**res)
# get the pkg name-v-r.arch # get the pkg e:name-v-r.arch
nvra = local_nvra(module, spec) envra = local_envra(module, spec)
# local rpm files can't be updated # local rpm files can't be updated
if not is_installed(module, repoq, nvra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot): if not is_installed(module, repoq, envra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot):
pkgs['install'].append(spec) pkgs['install'].append(spec)
continue continue
@ -1020,10 +1020,10 @@ def latest(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos, in
elif '://' in spec: elif '://' in spec:
# download package so that we can check if it's already installed # download package so that we can check if it's already installed
package = fetch_rpm_from_url(spec, module=module) package = fetch_rpm_from_url(spec, module=module)
nvra = local_nvra(module, package) envra = local_envra(module, package)
# local rpm files can't be updated # local rpm files can't be updated
if not is_installed(module, repoq, nvra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot): if not is_installed(module, repoq, envra, conf_file, en_repos=en_repos, dis_repos=dis_repos, installroot=installroot):
pkgs['install'].append(package) pkgs['install'].append(package)
continue continue