From 53e1310a7f37a649a689fbdaf0e2678a03553396 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Thu, 6 Aug 2015 13:34:25 +0100 Subject: [PATCH] Use 'pip freeze' output to detect changes with requirement specified If the requirements contains a repos url it will always report 'Successfully installed'; there is no difference in the output to tell apart if anything new was pulled. Use freeze to detect if the environment changed in any way. Should fix ansible/ansible#1705 --- lib/ansible/modules/packaging/language/pip.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/ansible/modules/packaging/language/pip.py b/lib/ansible/modules/packaging/language/pip.py index bdd2b40a1aa..3b5f396ab45 100755 --- a/lib/ansible/modules/packaging/language/pip.py +++ b/lib/ansible/modules/packaging/language/pip.py @@ -363,6 +363,12 @@ def main(): changed = (state == 'present' and not is_present) or (state == 'absent' and is_present) module.exit_json(changed=changed, cmd=freeze_cmd, stdout=out, stderr=err) + if requirements: + freeze_cmd = '%s freeze' % pip + out_freeze_before = module.run_command(freeze_cmd, cwd=chdir)[1] + else: + out_freeze_before = None + rc, out_pip, err_pip = module.run_command(cmd, path_prefix=path_prefix, cwd=chdir) out += out_pip err += err_pip @@ -375,7 +381,11 @@ def main(): if state == 'absent': changed = 'Successfully uninstalled' in out_pip else: - changed = 'Successfully installed' in out_pip + if out_freeze_before is None: + changed = 'Successfully installed' in out_pip + else: + out_freeze_after = module.run_command(freeze_cmd, cwd=chdir)[1] + changed = out_freeze_before != out_freeze_after module.exit_json(changed=changed, cmd=cmd, name=name, version=version, state=state, requirements=requirements, virtualenv=env,