mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Merge pull request #270 from skvidal/devel
first_if_available and yum fixes
This commit is contained in:
commit
47ec93b32f
4 changed files with 50 additions and 6 deletions
|
@ -390,7 +390,9 @@ class PlayBook(object):
|
||||||
module_args = tokens[1]
|
module_args = tokens[1]
|
||||||
|
|
||||||
# include task specific vars
|
# include task specific vars
|
||||||
module_vars = task.get('vars')
|
module_vars = task.get('vars', {})
|
||||||
|
if 'first_available_file' in task:
|
||||||
|
module_vars['first_available_file'] = task.get('first_available_file')
|
||||||
|
|
||||||
# tasks can be direct (run on all nodes matching
|
# tasks can be direct (run on all nodes matching
|
||||||
# the pattern) or conditional, where they ran
|
# the pattern) or conditional, where they ran
|
||||||
|
|
|
@ -390,6 +390,20 @@ class Runner(object):
|
||||||
|
|
||||||
# apply templating to source argument
|
# apply templating to source argument
|
||||||
inject = self.setup_cache.get(conn.host,{})
|
inject = self.setup_cache.get(conn.host,{})
|
||||||
|
|
||||||
|
# if we have first_available_file in our vars
|
||||||
|
# look up the files and use the first one we find as src
|
||||||
|
if 'first_available_file' in self.module_vars:
|
||||||
|
found = False
|
||||||
|
for fn in self.module_vars.get('first_available_file'):
|
||||||
|
fn = utils.template(fn, inject, self.setup_cache)
|
||||||
|
if os.path.exists(fn):
|
||||||
|
source = fn
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
return (host, True, dict(failed=True, msg="could not find src"), '')
|
||||||
|
|
||||||
source = utils.template(source, inject, self.setup_cache)
|
source = utils.template(source, inject, self.setup_cache)
|
||||||
|
|
||||||
# transfer the file to a remote tmp location
|
# transfer the file to a remote tmp location
|
||||||
|
@ -480,6 +494,20 @@ class Runner(object):
|
||||||
|
|
||||||
# apply templating to source argument so vars can be used in the path
|
# apply templating to source argument so vars can be used in the path
|
||||||
inject = self.setup_cache.get(conn.host,{})
|
inject = self.setup_cache.get(conn.host,{})
|
||||||
|
|
||||||
|
# if we have first_available_file in our vars
|
||||||
|
# look up the files and use the first one we find as src
|
||||||
|
if 'first_available_file' in self.module_vars:
|
||||||
|
found = False
|
||||||
|
for fn in self.module_vars.get('first_available_file'):
|
||||||
|
fn = utils.template(fn, inject, self.setup_cache)
|
||||||
|
if os.path.exists(fn):
|
||||||
|
source = fn
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
return (host, True, dict(failed=True, msg="could not find src"), '')
|
||||||
|
|
||||||
source = utils.template(source, inject, self.setup_cache)
|
source = utils.template(source, inject, self.setup_cache)
|
||||||
|
|
||||||
(host, ok, data, err) = (None, None, None, None)
|
(host, ok, data, err) = (None, None, None, None)
|
||||||
|
|
18
library/yum
18
library/yum
|
@ -57,13 +57,24 @@ def pkg_to_dict(po):
|
||||||
'epoch':po.epoch,
|
'epoch':po.epoch,
|
||||||
'release':po.release,
|
'release':po.release,
|
||||||
'version':po.version,
|
'version':po.version,
|
||||||
'repo':po.ui_from_repo,
|
|
||||||
'_nevra':po.ui_nevra,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if type(po) == yum.rpmsack.RPMInstalledPackage:
|
if type(po) == yum.rpmsack.RPMInstalledPackage:
|
||||||
d['yumstate'] = 'installed'
|
d['yumstate'] = 'installed'
|
||||||
|
d['repo'] = 'installed'
|
||||||
else:
|
else:
|
||||||
d['yumstate'] = 'available'
|
d['yumstate'] = 'available'
|
||||||
|
d['repo'] = po.repoid
|
||||||
|
|
||||||
|
if hasattr(po, 'ui_from_repo'):
|
||||||
|
d['repo'] = po.ui_from_repo
|
||||||
|
|
||||||
|
if hasattr(po, 'ui_nevra'):
|
||||||
|
d['_nevra'] = po.ui_nevra
|
||||||
|
else:
|
||||||
|
d['_nevra'] = '%s-%s-%s.%s' % (po.name, po.version, po.release, po.arch)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
@ -215,6 +226,9 @@ def ensure(my, state, pkgspec):
|
||||||
|
|
||||||
if state == 'latest':
|
if state == 'latest':
|
||||||
updates = my.doPackageLists(pkgnarrow='updates', patterns=[pkgspec]).updates
|
updates = my.doPackageLists(pkgnarrow='updates', patterns=[pkgspec]).updates
|
||||||
|
# sucks but this is for rhel5 - won't matter for rhel6 or fedora or whatnot
|
||||||
|
e,m,u = yum.parsePackages(updates, [pkgspec], casematch=True)
|
||||||
|
updates = e + m
|
||||||
avail = my.doPackageLists(pkgnarrow='available', patterns=[pkgspec]).available
|
avail = my.doPackageLists(pkgnarrow='available', patterns=[pkgspec]).available
|
||||||
if not updates and not avail:
|
if not updates and not avail:
|
||||||
if not my.doPackageLists(pkgnarrow='installed', patterns=[pkgspec]).installed:
|
if not my.doPackageLists(pkgnarrow='installed', patterns=[pkgspec]).installed:
|
||||||
|
|
Loading…
Reference in a new issue