mirror of
https://github.com/ansible/ansible.git
synced 2026-08-03 00:22:10 +02:00
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
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user