Merge pull request #270 from skvidal/devel

first_if_available and yum fixes
pull/268/merge
Michael DeHaan 13 years ago
commit 47ec93b32f

@ -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)

@ -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…
Cancel
Save