pip - fix reporting changed for empty venv creation (#85556)

* Add correct empty venv creation handling

Makes the module exit with changed=True
when an empty venv is created with correct
module output

* Add tests for creating an empty venv
pull/85613/head
Patrick Kingston 4 months ago committed by GitHub
parent c0256d6edf
commit 817f0af239
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,2 @@
bugfixes:
- pip - Fix pip module output so that it returns changed when the only operation is initializing a venv.

@ -608,7 +608,7 @@ def setup_virtualenv(module, env, chdir, out, err):
err += err_venv
if rc != 0:
_fail(module, cmd, out, err)
return out, err
return out, err, cmd
class Package:
@ -741,11 +741,12 @@ def main():
err = ''
out = ''
venv_cmd = ''
if env:
if not os.path.exists(os.path.join(env, 'bin', 'activate')):
venv_created = True
out, err = setup_virtualenv(module, env, chdir, out, err)
out, err, venv_cmd = setup_virtualenv(module, env, chdir, out, err)
py_bin = os.path.join(env, 'bin', 'python')
else:
py_bin = module.params['executable'] or sys.executable
@ -811,6 +812,11 @@ def main():
cmd.extend(to_native(p) for p in packages)
elif requirements:
cmd.extend(['-r', requirements])
elif venv_created and not name and not requirements:
# ONLY creating an empty venv
module.exit_json(changed=venv_created, cmd=venv_cmd, name=name, version=version,
state=state, requirements=requirements, virtualenv=env,
stdout=out, stderr=err)
else:
module.warn("No valid name or requirements file found.")
module.exit_json(changed=False)

@ -213,6 +213,35 @@
that:
- "diff_case_check_mode is not changed"
- name: ensure is a fresh venv
file:
state: absent
name: "{{ remote_tmp_dir }}/emptyvenv"
- name: create an empty venv
pip:
name: []
virtualenv: "{{ remote_tmp_dir }}/emptyvenv"
register: empty_venv
- name: check venv was created
file:
name: "{{ remote_tmp_dir }}/emptyvenv"
register: check_empty_venv_exists
- name: try creating an empty venv so it isn't changed
pip:
name: []
virtualenv: "{{ remote_tmp_dir }}/emptyvenv"
register: second_empty_venv
- name: assert that the venv was created and has no packages
assert:
that:
- empty_venv.changed
- not check_empty_venv_exists.changed
- not second_empty_venv.changed
# ansible#23204
- name: ensure is a fresh virtualenv
file:

Loading…
Cancel
Save