summaryrefslogtreecommitdiff
path: root/test/integration/targets/pip/tasks/pip.yml
blob: c6d398015d5180d635f91e6c000835b25b520167 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# test code for the pip module
# (c) 2014, Michael DeHaan <michael.dehaan@gmail.com>

# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.

# FIXME: replace the python test package

# first some tests installed system-wide
# verify things were not installed to start with

- name: ensure a package is not installed (precondition setup)
  pip: name={{ pip_test_package }} state=absent

# verify that a package that is uninstalled being set to absent
# results in an unchanged state and that the test package is not
# installed

- name: ensure a package is not installed
  pip: name={{ pip_test_package }} state=absent
  register: uninstall_result

- name: removing an unremoved package should return unchanged
  assert: 
    that:
       - "not uninstall_result.changed"

- shell: "{{ ansible_python.executable }} -c 'import {{ pip_test_package }}'"
  register: absent_result
  ignore_errors: True

- name: verify {{ pip_test_package }} is not present
  assert: 
    that:
       - "absent_result.rc != 0"

# now we're going to install the test package knowing it is uninstalled
# and check that installation was ok

- name: ensure a package is installed
  pip: name={{ pip_test_package }} state=present
  register: install_result

- name: verify we recorded a change
  assert:
    that:
      - "install_result.changed == True"
 
- shell: "{{ ansible_python.executable }} -c 'import {{ pip_test_package }}'"
  register: installed_result

# now remove it to test uninstallation of a package we are sure is installed

- name: now uninstall so we can see that a change occurred
  pip: name={{ pip_test_package }} state=absent
  register: absent2  

- name: assert a change occurred on uninstallation
  assert:
    that:
      - "absent2.changed"

# put the test package back

- name: now put it back in case someone wanted it (like us!)
  pip: name={{ pip_test_package }} state=present


# Test virtualenv installations

- name: make sure the test env doesn't exist
  file: state=absent name={{ output_dir }}/pipenv

- name: install a working version of setuptools in the virtualenv
  pip: name=setuptools virtualenv={{ output_dir }}/pipenv state=present version=33.1.1

- name: create a requirement file with an vcs url
  copy: dest={{ output_dir }}/pipreq.txt
    content="-e git+https://github.com/dvarrazzo/pyiso8601#egg=pyiso8601"

- name: install the requirement file in a virtualenv
  pip: requirements={{ output_dir}}/pipreq.txt
    virtualenv={{ output_dir }}/pipenv
  register: req_installed

- name: check that a change occurred
  assert:
    that:
      - "req_installed.changed"

- name: repeat installation to check status didn't change
  pip: requirements={{ output_dir}}/pipreq.txt
    virtualenv={{ output_dir }}/pipenv
  register: req_installed

- name: check that a change didn't occurr this time (bug ansible#1705)
  assert:
    that:
      - "not req_installed.changed"

- name: install the same module from url
  pip: name="git+https://github.com/dvarrazzo/pyiso8601#egg=pyiso8601"
    virtualenv={{ output_dir }}/pipenv
  register: url_installed

- name: check that a change didn't occurr (bug ansible-modules-core#1645)
  assert:
    that:
      - "not url_installed.changed"

# Test pip package in check mode doesn't always report changed.

# Special case for pip
- name: check for pip package
  pip: name=pip virtualenv={{ output_dir }}/pipenv state=present

- name: check for pip package in check_mode
  pip: name=pip virtualenv={{ output_dir }}/pipenv state=present
  check_mode: True
  register: pip_check_mode

- name: make sure pip in check_mode doesn't report changed
  assert:
    that:
      - "not pip_check_mode.changed"

# Special case for setuptools
- name: check for setuptools package
  pip: name=setuptools virtualenv={{ output_dir }}/pipenv state=present

- name: check for setuptools package in check_mode
  pip: name=setuptools virtualenv={{ output_dir }}/pipenv state=present
  check_mode: True
  register: setuptools_check_mode

- name: make sure setuptools in check_mode doesn't report changed
  assert:
    that:
      - "not setuptools_check_mode.changed"


# Upgrade pip in virtualenv
- name: download get-pip.py
  get_url:
    url: https://bootstrap.pypa.io/get-pip.py
    dest: "{{ output_dir }}"

- name: install pip
  command: "{{ output_dir }}/pipenv/bin/python {{ output_dir }}/get-pip.py"

# Normal case
- name: check for q package
  pip: name=q virtualenv={{ output_dir }}/pipenv state=present

- name: check for q package in check_mode
  pip: name=q virtualenv={{ output_dir }}/pipenv state=present
  check_mode: True
  register: q_check_mode

- name: make sure q in check_mode doesn't report changed
  assert:
    that:
      - "not q_check_mode.changed"