mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
commit
194f270a92
1 changed files with 28 additions and 3 deletions
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
# (c) 2012, Red Hat, Inc
|
# (c) 2012, Red Hat, Inc
|
||||||
# Written by Seth Vidal <skvidal at fedoraproject.org>
|
# Written by Seth Vidal <skvidal at fedoraproject.org>
|
||||||
|
# (c) 2014, Epic Games, Inc.
|
||||||
#
|
#
|
||||||
# This file is part of Ansible
|
# This file is part of Ansible
|
||||||
#
|
#
|
||||||
|
@ -28,6 +29,7 @@ import yum
|
||||||
try:
|
try:
|
||||||
from yum.misc import find_unfinished_transactions, find_ts_remaining
|
from yum.misc import find_unfinished_transactions, find_ts_remaining
|
||||||
from rpmUtils.miscutils import splitFilename
|
from rpmUtils.miscutils import splitFilename
|
||||||
|
from rpmUtils.miscutils import compareEVR
|
||||||
transaction_helpers = True
|
transaction_helpers = True
|
||||||
except:
|
except:
|
||||||
transaction_helpers = False
|
transaction_helpers = False
|
||||||
|
@ -38,7 +40,7 @@ module: yum
|
||||||
version_added: historical
|
version_added: historical
|
||||||
short_description: Manages packages with the I(yum) package manager
|
short_description: Manages packages with the I(yum) package manager
|
||||||
description:
|
description:
|
||||||
- Installs, upgrade, removes, and lists packages and groups with the I(yum) package manager.
|
- Installs, upgrades, downgrades, removes and lists packages and groups with the I(yum) package manager.
|
||||||
options:
|
options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
|
@ -108,7 +110,7 @@ EXAMPLES = '''
|
||||||
- name: remove the Apache package
|
- name: remove the Apache package
|
||||||
yum: name=httpd state=removed
|
yum: name=httpd state=removed
|
||||||
|
|
||||||
- name: install the latest version of Apche from the testing repo
|
- name: install the latest version of Apache from the testing repo
|
||||||
yum: name=httpd enablerepo=testing state=installed
|
yum: name=httpd enablerepo=testing state=installed
|
||||||
|
|
||||||
- name: upgrade all packages
|
- name: upgrade all packages
|
||||||
|
@ -462,6 +464,8 @@ def install(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos):
|
||||||
res['rc'] = 0
|
res['rc'] = 0
|
||||||
res['changed'] = False
|
res['changed'] = False
|
||||||
|
|
||||||
|
downgrade = False
|
||||||
|
|
||||||
for spec in items:
|
for spec in items:
|
||||||
pkg = None
|
pkg = None
|
||||||
|
|
||||||
|
@ -535,12 +539,33 @@ def install(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos):
|
||||||
|
|
||||||
if found:
|
if found:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# downgrade - the yum install command will only install or upgrade to a spec version, it will
|
||||||
|
# not install an older version of an RPM even if specified by the install spec. So we need to
|
||||||
|
# determine if this is a downgrade, and then use the yum downgrade command to install the RPM.
|
||||||
|
split_pkg_name = splitFilename(spec)
|
||||||
|
# if the Name and Version match a version was not provided and this is not a downgrade.
|
||||||
|
if split_pkg_name[0] == split_pkg_name[1]:
|
||||||
|
pkg_name = split_pkg_name[0]
|
||||||
|
pkgs = is_installed(module, repoq, pkg_name, conf_file, en_repos=en_repos, dis_repos=dis_repos, is_pkg=True)
|
||||||
|
if pkgs:
|
||||||
|
(cur_name, cur_ver, cur_rel, cur_epoch, cur_arch) = splitFilename(pkgs[0])
|
||||||
|
(new_name, new_ver, new_rel, new_epoch, new_arch) = splitFilename(spec)
|
||||||
|
|
||||||
|
compare = compareEVR((cur_epoch, cur_ver, cur_rel), (new_epoch, new_ver, new_rel))
|
||||||
|
if compare > 0:
|
||||||
|
downgrade = True
|
||||||
|
|
||||||
# if not - then pass in the spec as what to install
|
# if not - then pass in the spec as what to install
|
||||||
# we could get here if nothing provides it but that's not
|
# we could get here if nothing provides it but that's not
|
||||||
# the error we're catching here
|
# the error we're catching here
|
||||||
pkg = spec
|
pkg = spec
|
||||||
|
|
||||||
cmd = yum_basecmd + ['install', pkg]
|
operation = 'install'
|
||||||
|
if downgrade:
|
||||||
|
operation = 'downgrade'
|
||||||
|
|
||||||
|
cmd = yum_basecmd + [operation, pkg]
|
||||||
|
|
||||||
if module.check_mode:
|
if module.check_mode:
|
||||||
module.exit_json(changed=True)
|
module.exit_json(changed=True)
|
||||||
|
|
Loading…
Reference in a new issue