diff --git a/lib/ansible/modules/packaging/language/pip.py b/lib/ansible/modules/packaging/language/pip.py index df41251b81c..9eda293250a 100755 --- a/lib/ansible/modules/packaging/language/pip.py +++ b/lib/ansible/modules/packaging/language/pip.py @@ -424,7 +424,6 @@ def main(): if requirements: cmd += ' -r %s' % requirements - if module.check_mode: if extra_args or requirements or state == 'latest' or not name: module.exit_json(changed=True) @@ -438,8 +437,34 @@ def main(): changed = False if name: - # Pip spits an upgrade notice to stdout that we have to get rid of pkg_list = [p for p in out.split('\n') if not p.startswith('You are using') and not p.startswith('You should consider') and p] + if pkg_cmd.endswith(' freeze') and ('pip' in name or 'setuptools' in name): + # Older versions of pip (pre-1.3) do not have pip list. + # pip freeze does not list setuptools or pip in its output + # So we need to get those via a specialcase + if 'setuptools' in name: + try: + import setuptools + except ImportError: + # Could not import, assume that it is not installed + pass + else: + formatted_dep = 'setuptools==%s' % setuptools.__version__ + pkg_list.append(formatted_dep) + out += '%s\n' % formatted_dep + + if 'pip' in name: + try: + import pkg_resources + except ImportError: + # Could not import pkg_resources. pip requires + # pkg_resources so assume that it is not installed + pass + else: + formatted_dep = 'pip==%s' % pkg_resources.get_distribution('pip').version + pkg_list.append(formatted_dep) + out += '%s\n' % formatted_dep + for pkg in name: is_present = _is_present(pkg, version, pkg_list, pkg_cmd) if (state == 'present' and not is_present) or (state == 'absent' and is_present):