Skip to content

Commit 7810047

Browse files
committed
Preventable sync in python repository
This avoids pulling the whole of pypi when configuring a pull-through cache
1 parent 38fd121 commit 7810047

3 files changed

Lines changed: 209 additions & 0 deletions

File tree

roles/pulp_repository/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,10 @@ Example playbook
5252
architectures: amd64
5353
policy: on_demand
5454
state: present
55+
pulp_repository_python_repos:
56+
- name: pypi
57+
url: https://pypi.org/
58+
policy: on_demand
59+
state: present
60+
sync: false
5561
```

roles/pulp_repository/tasks/python.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
when:
6161
- pulp_repository_python_repos[repository_index].url is defined
6262
- pulp_repository_python_repos[repository_index].state == "present"
63+
- pulp_repository_python_repos[repository_index].sync | default(True)
6364
loop: "{{ pulp_repository_python_repos | map(attribute='name') }}"
6465
loop_control:
6566
index_var: repository_index

tests/test_python_repository.yml

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
---
2+
- name: Test pulp_repository python
3+
gather_facts: false
4+
hosts: localhost
5+
vars:
6+
pulp_url: http://localhost:8080
7+
pulp_username: admin
8+
pulp_password: password
9+
pulp_validate_certs: true
10+
pulp_repository_python_repos_sync_retries: 2
11+
tasks:
12+
- name: Create test_python_repo
13+
include_role:
14+
name: pulp_repository
15+
vars:
16+
pulp_repository_python_repos:
17+
- name: test_python_repo
18+
# trailing slash is mandatory
19+
url: "https://fixtures.pulpproject.org/python-pypi/"
20+
policy: immediate
21+
state: present
22+
includes: ["shelf-reader"]
23+
24+
- name: Query repository
25+
pulp.squeezer.python_repository:
26+
pulp_url: "{{ pulp_url }}"
27+
username: "{{ pulp_username }}"
28+
password: "{{ pulp_password }}"
29+
validate_certs: "{{ pulp_validate_certs }}"
30+
name: test_python_repo
31+
register: repo_result
32+
33+
- name: Verify repository creation
34+
assert:
35+
that:
36+
- repo_result.repository.name == "test_python_repo"
37+
38+
- name: Query remote
39+
pulp.squeezer.python_remote:
40+
pulp_url: "{{ pulp_url }}"
41+
username: "{{ pulp_username }}"
42+
password: "{{ pulp_password }}"
43+
validate_certs: "{{ pulp_validate_certs }}"
44+
name: test_python_repo-remote
45+
register: remote_result
46+
47+
- name: Verify remote creation
48+
assert:
49+
that:
50+
- remote_result.remote.name == "test_python_repo-remote"
51+
- remote_result.remote.url == "https://fixtures.pulpproject.org/python-pypi/"
52+
- remote_result.remote.policy == "immediate"
53+
54+
- name: Query content
55+
pulp.squeezer.api_call:
56+
pulp_url: "{{ pulp_url }}"
57+
username: "{{ pulp_username }}"
58+
password: "{{ pulp_password }}"
59+
validate_certs: "{{ pulp_validate_certs }}"
60+
operation_id: content_python_packages_list
61+
parameters:
62+
repository_version: "{{ repo_result.repository.latest_version_href }}"
63+
register: content_result
64+
65+
- name: Verify synced content
66+
assert:
67+
that:
68+
- content_result.response.count == 2
69+
- content_result.response.results[0].filename == "shelf_reader-0.1-py2-none-any.whl"
70+
fail_msg: |
71+
count: {{ content_result.response.count }}
72+
filenames: {% for r in content_result.response.results %}{{ r.filename }} {% endfor %}
73+
74+
- name: Delete test_python_repo
75+
include_role:
76+
name: pulp_repository
77+
vars:
78+
pulp_repository_python_repos:
79+
- name: test_python_repo
80+
state: absent
81+
82+
- name: Query repositories
83+
pulp.squeezer.python_repository:
84+
pulp_url: "{{ pulp_url }}"
85+
username: "{{ pulp_username }}"
86+
password: "{{ pulp_password }}"
87+
validate_certs: "{{ pulp_validate_certs }}"
88+
register: python_repositories
89+
90+
- name: Verify repository deletion
91+
assert:
92+
that: python_repositories.repositories | length == 0
93+
94+
- name: Query remotes
95+
pulp.squeezer.python_remote:
96+
pulp_url: "{{ pulp_url }}"
97+
username: "{{ pulp_username }}"
98+
password: "{{ pulp_password }}"
99+
validate_certs: "{{ pulp_validate_certs }}"
100+
register: python_remotes
101+
102+
- name: Verify remote deletion
103+
assert:
104+
that: python_remotes.remotes | length == 0
105+
106+
# ------------- TEST no sync -------------
107+
- include_role:
108+
name: pulp_repository
109+
vars:
110+
pulp_repository_python_repos:
111+
# reuse previous repo name to simplify 'Verify repository deletion'
112+
- name: test_python_repo
113+
url: "https://fixtures.pulpproject.org/python-pypi/"
114+
policy: immediate
115+
state: present
116+
sync: false # changed parameter from default true
117+
includes: ["shelf-reader"]
118+
119+
- name: Query repository
120+
pulp.squeezer.python_repository:
121+
pulp_url: "{{ pulp_url }}"
122+
username: "{{ pulp_username }}"
123+
password: "{{ pulp_password }}"
124+
validate_certs: "{{ pulp_validate_certs }}"
125+
name: test_python_repo
126+
register: repo_result
127+
128+
- name: Verify repository creation
129+
assert:
130+
that:
131+
- repo_result.repository.name == "test_python_repo"
132+
133+
- name: Query remote
134+
pulp.squeezer.python_remote:
135+
pulp_url: "{{ pulp_url }}"
136+
username: "{{ pulp_username }}"
137+
password: "{{ pulp_password }}"
138+
validate_certs: "{{ pulp_validate_certs }}"
139+
name: test_python_repo-remote
140+
register: remote_result
141+
142+
- name: Verify remote creation
143+
assert:
144+
that:
145+
- remote_result.remote.name == "test_python_repo-remote"
146+
- remote_result.remote.url == "https://fixtures.pulpproject.org/python-pypi/"
147+
- remote_result.remote.policy == "immediate"
148+
149+
- name: Query content (no synced content)
150+
pulp.squeezer.api_call:
151+
pulp_url: "{{ pulp_url }}"
152+
username: "{{ pulp_username }}"
153+
password: "{{ pulp_password }}"
154+
validate_certs: "{{ pulp_validate_certs }}"
155+
operation_id: content_python_packages_list
156+
parameters:
157+
repository_version: "{{ repo_result.repository.latest_version_href }}"
158+
register: content_result
159+
160+
- debug:
161+
var: content_result
162+
163+
- name: Verify no synced content
164+
assert:
165+
that:
166+
- content_result.response.count == 0
167+
- content_result.response.results | length == 0
168+
fail_msg: |
169+
count: {{ content_result.response.count }}
170+
filenames: {% for r in content_result.response.results %}{{ r.filename }} {% endfor %}
171+
172+
- name: Delete test_python_repo
173+
include_role:
174+
name: pulp_repository
175+
vars:
176+
pulp_repository_python_repos:
177+
- name: test_python_repo
178+
state: absent
179+
180+
- name: Query repositories
181+
pulp.squeezer.python_repository:
182+
pulp_url: "{{ pulp_url }}"
183+
username: "{{ pulp_username }}"
184+
password: "{{ pulp_password }}"
185+
validate_certs: "{{ pulp_validate_certs }}"
186+
register: python_repositories
187+
188+
- name: Verify repository deletion
189+
assert:
190+
that: python_repositories.repositories | length == 0
191+
192+
- name: Query remotes
193+
pulp.squeezer.python_remote:
194+
pulp_url: "{{ pulp_url }}"
195+
username: "{{ pulp_username }}"
196+
password: "{{ pulp_password }}"
197+
validate_certs: "{{ pulp_validate_certs }}"
198+
register: python_remotes
199+
200+
- name: Verify remote deletion
201+
assert:
202+
that: python_remotes.remotes | length == 0

0 commit comments

Comments
 (0)