mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
- add a check for repoquery so we can abort politely
- make the results output a bit more readable - fix up where repoquery is looked for so it is easier to change
This commit is contained in:
parent
98e4034de2
commit
fd492bebc6
1 changed files with 25 additions and 19 deletions
42
library/yum
42
library/yum
|
@ -23,6 +23,8 @@ import traceback
|
||||||
import os
|
import os
|
||||||
|
|
||||||
def_qf = "%{name}-%{version}-%{release}.%{arch}"
|
def_qf = "%{name}-%{version}-%{release}.%{arch}"
|
||||||
|
repoquery='/usr/bin/repoquery'
|
||||||
|
yumbin='/usr/bin/yum'
|
||||||
|
|
||||||
def is_installed(repoq, pkgspec, qf=def_qf):
|
def is_installed(repoq, pkgspec, qf=def_qf):
|
||||||
cmd = repoq + "--disablerepo=\* --pkgnarrow=installed --qf '%s' %s " % (qf, pkgspec)
|
cmd = repoq + "--disablerepo=\* --pkgnarrow=installed --qf '%s' %s " % (qf, pkgspec)
|
||||||
|
@ -104,9 +106,9 @@ def repolist(repoq, qf="%{repoid}"):
|
||||||
|
|
||||||
def list_stuff(conf_file, stuff):
|
def list_stuff(conf_file, stuff):
|
||||||
qf = "%{name}|%{epoch}|%{version}|%{release}|%{arch}|%{repoid}"
|
qf = "%{name}|%{epoch}|%{version}|%{release}|%{arch}|%{repoid}"
|
||||||
repoq = '/usr/bin/repoquery --plugins --quiet -q '
|
repoq = '%s --plugins --quiet -q ' % repoquery
|
||||||
if conf_file and os.path.exists(conf_file):
|
if conf_file and os.path.exists(conf_file):
|
||||||
repoq = '/usr/bin/repoquery -c %s --plugins --quiet -q ' % conf_file
|
repoq = '%s -c %s --plugins --quiet -q ' % (repoquery,conf_file)
|
||||||
|
|
||||||
|
|
||||||
if stuff == 'installed':
|
if stuff == 'installed':
|
||||||
|
@ -146,7 +148,7 @@ def run(command):
|
||||||
|
|
||||||
def install(module, items, repoq, yum_basecmd):
|
def install(module, items, repoq, yum_basecmd):
|
||||||
res = {}
|
res = {}
|
||||||
res['results'] = ''
|
res['results'] = []
|
||||||
res['msg'] = ''
|
res['msg'] = ''
|
||||||
res['rc'] = 0
|
res['rc'] = 0
|
||||||
res['changed'] = False
|
res['changed'] = False
|
||||||
|
@ -185,7 +187,7 @@ def install(module, items, repoq, yum_basecmd):
|
||||||
for this in pkglist:
|
for this in pkglist:
|
||||||
if is_installed(repoq, this):
|
if is_installed(repoq, this):
|
||||||
found = True
|
found = True
|
||||||
res['results'] += '%s providing %s is already installed\n' % (this, spec)
|
res['results'].append('%s providing %s is already installed' % (this, spec))
|
||||||
|
|
||||||
if found:
|
if found:
|
||||||
continue
|
continue
|
||||||
|
@ -195,7 +197,6 @@ def install(module, items, repoq, yum_basecmd):
|
||||||
pkg = spec
|
pkg = spec
|
||||||
|
|
||||||
cmd = "%s install '%s'" % (yum_basecmd, pkg)
|
cmd = "%s install '%s'" % (yum_basecmd, pkg)
|
||||||
res['results'] += "\nInstalling %s\n" % pkg
|
|
||||||
rc, out, err = run(cmd)
|
rc, out, err = run(cmd)
|
||||||
# FIXME - if we did an install - go and check the rpmdb to see if it actually installed
|
# FIXME - if we did an install - go and check the rpmdb to see if it actually installed
|
||||||
# look for the pkg in rpmdb
|
# look for the pkg in rpmdb
|
||||||
|
@ -203,12 +204,12 @@ def install(module, items, repoq, yum_basecmd):
|
||||||
if rc:
|
if rc:
|
||||||
res['changed'] = False
|
res['changed'] = False
|
||||||
res['rc'] = rc
|
res['rc'] = rc
|
||||||
res['results'] += out
|
res['results'].append(out)
|
||||||
res['msg'] += err
|
res['msg'] += err
|
||||||
else:
|
else:
|
||||||
res['changed'] = True
|
res['changed'] = True
|
||||||
res['rc'] = 0
|
res['rc'] = 0
|
||||||
res['results'] += out
|
res['results'].append(out)
|
||||||
res['msg'] += err
|
res['msg'] += err
|
||||||
|
|
||||||
module.exit_json(**res)
|
module.exit_json(**res)
|
||||||
|
@ -216,7 +217,7 @@ def install(module, items, repoq, yum_basecmd):
|
||||||
|
|
||||||
def remove(module, items, repoq, yum_basecmd):
|
def remove(module, items, repoq, yum_basecmd):
|
||||||
res = {}
|
res = {}
|
||||||
res['results'] = ''
|
res['results'] = []
|
||||||
res['msg'] = ''
|
res['msg'] = ''
|
||||||
res['changed'] = False
|
res['changed'] = False
|
||||||
res['rc'] = 0
|
res['rc'] = 0
|
||||||
|
@ -241,6 +242,7 @@ def remove(module, items, repoq, yum_basecmd):
|
||||||
found = True
|
found = True
|
||||||
|
|
||||||
if not found:
|
if not found:
|
||||||
|
res['results'].append('%s is not installed' % spec)
|
||||||
continue
|
continue
|
||||||
pkg = spec
|
pkg = spec
|
||||||
|
|
||||||
|
@ -253,19 +255,19 @@ def remove(module, items, repoq, yum_basecmd):
|
||||||
res['changed'] = False
|
res['changed'] = False
|
||||||
res['failed'] = True
|
res['failed'] = True
|
||||||
res['rc'] = rc
|
res['rc'] = rc
|
||||||
res['results'] += out
|
res['results'].append(out)
|
||||||
res['msg'] += err
|
res['msg'] += err
|
||||||
else:
|
else:
|
||||||
res['changed'] = True
|
res['changed'] = True
|
||||||
res['rc'] = 0
|
res['rc'] = 0
|
||||||
res['results'] += out
|
res['results'].append(out)
|
||||||
res['msg'] += err
|
res['msg'] += err
|
||||||
|
|
||||||
module.exit_json(**res)
|
module.exit_json(**res)
|
||||||
|
|
||||||
def latest(module, items, repoq, yum_basecmd):
|
def latest(module, items, repoq, yum_basecmd):
|
||||||
res = {}
|
res = {}
|
||||||
res['results'] = ''
|
res['results'] = []
|
||||||
res['msg'] = ''
|
res['msg'] = ''
|
||||||
res['changed'] = False
|
res['changed'] = False
|
||||||
res['rc'] = 0
|
res['rc'] = 0
|
||||||
|
@ -294,7 +296,7 @@ def latest(module, items, repoq, yum_basecmd):
|
||||||
nothing_to_do = True
|
nothing_to_do = True
|
||||||
|
|
||||||
if nothing_to_do:
|
if nothing_to_do:
|
||||||
res['results'] += "All packages providing %s are up to date" % spec
|
res['results'].append("All packages providing %s are up to date" % spec)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not found:
|
if not found:
|
||||||
|
@ -322,12 +324,12 @@ def latest(module, items, repoq, yum_basecmd):
|
||||||
res['changed'] = False
|
res['changed'] = False
|
||||||
res['failed'] = True
|
res['failed'] = True
|
||||||
res['rc'] = rc
|
res['rc'] = rc
|
||||||
res['results'] += out
|
res['results'].append(out)
|
||||||
res['msg'] += err
|
res['msg'] += err
|
||||||
else:
|
else:
|
||||||
res['changed'] = True
|
res['changed'] = True
|
||||||
res['rc'] = 0
|
res['rc'] = 0
|
||||||
res['results'] += out
|
res['results'].append(out)
|
||||||
res['msg'] += err
|
res['msg'] += err
|
||||||
|
|
||||||
module.exit_json(**res)
|
module.exit_json(**res)
|
||||||
|
@ -344,11 +346,11 @@ def ensure(module, state, pkgspec, conf_file):
|
||||||
if pkgspec.find(',') != -1:
|
if pkgspec.find(',') != -1:
|
||||||
items = pkgspec.split(',')
|
items = pkgspec.split(',')
|
||||||
|
|
||||||
yum_basecmd = '/usr/bin/yum -d1 -y '
|
yum_basecmd = '%s -d 1 -y ' % yumbin
|
||||||
repoq = '/usr/bin/repoquery --plugins --quiet -q '
|
repoq = '%s --plugins --quiet -q ' % repoquery
|
||||||
if conf_file and os.path.exists(conf_file):
|
if conf_file and os.path.exists(conf_file):
|
||||||
yum_basecmd = '/usr/bin/yum -c %s -d1 -y' % conf_file
|
yum_basecmd = '%s -c %s -d 1 -y' % (yumbin, conf_file)
|
||||||
repoq = '/usr/bin/repoquery -c %s --plugins --quiet -q ' % conf_file
|
repoq = '%s -c %s --plugins --quiet -q ' % (repoquery,conf_file)
|
||||||
|
|
||||||
if state in ['installed', 'present']:
|
if state in ['installed', 'present']:
|
||||||
install(module, items, repoq, yum_basecmd)
|
install(module, items, repoq, yum_basecmd)
|
||||||
|
@ -393,6 +395,10 @@ def main():
|
||||||
if params['list'] and params['pkg']:
|
if params['list'] and params['pkg']:
|
||||||
module.fail_json(msg="expected 'list=' or 'name=', but not both")
|
module.fail_json(msg="expected 'list=' or 'name=', but not both")
|
||||||
|
|
||||||
|
|
||||||
|
if not os.path.exists(repoquery):
|
||||||
|
module.fail_json(msg="%s is required to run this module. Please install the yum-utils package." % repoquery)
|
||||||
|
|
||||||
if params['list']:
|
if params['list']:
|
||||||
results = dict(results=list_stuff(params['conf_file'], params['list']))
|
results = dict(results=list_stuff(params['conf_file'], params['list']))
|
||||||
module.exit_json(**results)
|
module.exit_json(**results)
|
||||||
|
|
Loading…
Reference in a new issue