Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

first_if_available and yum fixes #270

Merged
merged 3 commits into from
Apr 28, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 4 additions & 2 deletions lib/ansible/playbook.py
Original file line number Diff line number Diff line change
Expand Up @@ -390,8 +390,10 @@ def _run_task(self, pattern=None, task=None,
module_args = tokens[1]

# 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
# the pattern) or conditional, where they ran
# as the result of a change handler on a subset
Expand Down
28 changes: 28 additions & 0 deletions lib/ansible/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,20 @@ def _execute_copy(self, conn, host, tmp):

# apply templating to source argument
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)

# transfer the file to a remote tmp location
Expand Down Expand Up @@ -480,6 +494,20 @@ def _execute_template(self, conn, host, tmp):

# apply templating to source argument so vars can be used in the path
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)

(host, ok, data, err) = (None, None, None, None)
Expand Down
4 changes: 2 additions & 2 deletions library/copy
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ for x in items:
src = params['src']
dest = params['dest']
if src:
src = os.path.expanduser(src)
src = os.path.expanduser(src)
if dest:
dest = os.path.expanduser(dest)
dest = os.path.expanduser(dest)

# raise an error if there is no src file
if not os.path.exists(src):
Expand Down
18 changes: 16 additions & 2 deletions library/yum
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,24 @@ def pkg_to_dict(po):
'epoch':po.epoch,
'release':po.release,
'version':po.version,
'repo':po.ui_from_repo,
'_nevra':po.ui_nevra,
}

if type(po) == yum.rpmsack.RPMInstalledPackage:
d['yumstate'] = 'installed'
d['repo'] = 'installed'
else:
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

Expand Down Expand Up @@ -215,6 +226,9 @@ def ensure(my, state, pkgspec):

if state == 'latest':
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
if not updates and not avail:
if not my.doPackageLists(pkgnarrow='installed', patterns=[pkgspec]).installed:
Expand Down