Skip to content

Commit 79fd282

Browse files
authored
Merge pull request #56 from stackhpc/stop-leaks-2
Prevent leaks when tasks fail - pulp_user
2 parents dd258eb + 41e7c2d commit 79fd282

File tree

4 files changed

+71
-53
lines changed

4 files changed

+71
-53
lines changed

roles/pulp_user/tasks/main.yml

Lines changed: 64 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
---
22
- name: Get information for each user
33
uri:
4-
url: "{{ pulp_user_url }}?username={{ item.username }}"
4+
url: "{{ pulp_user_url }}?username={{ pulp_users[user_index].username }}"
55
user: "{{ pulp_username }}"
66
password: "{{ pulp_password }}"
77
method: GET
88
status_code: 200
99
force_basic_auth: true
10-
loop: "{{ pulp_users }}"
10+
loop: "{{ pulp_users | map(attribute='username') }}"
11+
loop_control:
12+
index_var: user_index
1113
register: users_get_result
1214

1315
- name: Reset users facts
@@ -18,37 +20,52 @@
1820

1921
- name: Set users to delete fact
2022
set_fact:
21-
remove_users: "{{ remove_users + [user.json.results[0]] }}"
22-
loop: "{{ users_get_result.results }}"
23+
remove_users: "{{ remove_users + [users_get_result.results[user_index].json.results[0]] }}"
24+
loop: "{{ users_get_result.results | map(attribute='item') }}"
2325
loop_control:
24-
loop_var: "user"
25-
label: "{{ user.item.username }}"
26+
index_var: user_index
2627
when:
27-
- user.json.count == 1
28-
- user.item.state is defined
29-
- user.item.state == "absent"
28+
- users_get_result.results[user_index].json.count == 1
29+
- pulp_users[user_index].state is defined
30+
- pulp_users[user_index].state == "absent"
3031

3132
- name: Set users to create fact
3233
set_fact:
33-
create_users: "{{ create_users + [user.item] }}"
34-
loop: "{{ users_get_result.results }}"
34+
create_users: "{{ create_users + [pulp_users[user_index]] }}"
35+
loop: "{{ users_get_result.results | map(attribute='item') }}"
3536
loop_control:
36-
loop_var: "user"
37-
label: "{{ user.item.username }}"
37+
index_var: user_index
3838
when:
39-
- user.json.count == 0
40-
- user.item.state is not defined or user.item.state != "absent"
39+
- users_get_result.results[user_index].json.count == 0
40+
- pulp_users[user_index].state is not defined or pulp_users[user_index].state != "absent"
4141

4242
- name: Set users to update fact
4343
set_fact:
44-
update_users: "{{ update_users + [user.json.results[0] | combine(user.item) | combine({'existing_groups': user.json.results[0]['groups']}) ] }}"
45-
loop: "{{ users_get_result.results }}"
44+
update_users: >-
45+
{{- update_users + [users_get_result.results[user_index].json.results[0]
46+
| combine(pulp_users[user_index])
47+
| combine({'existing_groups': users_get_result.results[user_index].json.results[0]['groups']})] -}}
48+
loop: "{{ users_get_result.results | map(attribute='item') }}"
4649
loop_control:
47-
loop_var: "user"
48-
label: "{{ user.item.username }}"
50+
index_var: user_index
4951
when:
50-
- user.json.count == 1
51-
- user.item.state is not defined or user.item.state != "absent"
52+
- users_get_result.results[user_index].json.count == 1
53+
- pulp_users[user_index].state is not defined or pulp_users[user_index].state != "absent"
54+
- >-
55+
users_get_result.results[user_index].json.results[0].username != pulp_users[user_index].username or
56+
(pulp_users[user_index].first_name is defined and
57+
users_get_result.results[user_index].json.results[0].first_name != pulp_users[user_index].first_name) or
58+
(pulp_users[user_index].last_name is defined and
59+
users_get_result.results[user_index].json.results[0].last_name != pulp_users[user_index].last_name) or
60+
(pulp_users[user_index].email is defined and
61+
users_get_result.results[user_index].json.results[0].email != pulp_users[user_index].email) or
62+
(pulp_users[user_index].is_active is defined and
63+
users_get_result.results[user_index].json.results[0].is_active != pulp_users[user_index].is_active) or
64+
(pulp_users[user_index].is_staff is defined and
65+
users_get_result.results[user_index].json.results[0].is_staff != pulp_users[user_index].is_staff) or
66+
(pulp_users[user_index].groups is defined and
67+
users_get_result.results[user_index].json.results[0].groups | map(attribute='name') | list != pulp_users[user_index].groups) or
68+
pulp_users[user_index].password is defined
5269
5370
- name: Create users
5471
uri:
@@ -59,59 +76,60 @@
5976
method: POST
6077
status_code: 201
6178
body:
62-
username: "{{ item.username }}"
63-
password: "{{ item.password | default(None) }}"
64-
first_name: "{{ item.first_name | default(None) }}"
65-
last_name: "{{ item.last_name | default(None) }}"
66-
email: "{{ item.email | default(None) }}"
67-
is_staff: "{{ item.is_staff | default(None) }}"
68-
is_active: "{{ item.is_active | default(None) }}"
79+
username: "{{ create_users[user_index].username }}"
80+
password: "{{ create_users[user_index].password | default(None) }}"
81+
first_name: "{{ create_users[user_index].first_name | default(None) }}"
82+
last_name: "{{ create_users[user_index].last_name | default(None) }}"
83+
email: "{{ create_users[user_index].email | default(None) }}"
84+
is_staff: "{{ create_users[user_index].is_staff | default(None) }}"
85+
is_active: "{{ create_users[user_index].is_active | default(None) }}"
6986
body_format: form-urlencoded
70-
loop: "{{ create_users }}"
87+
loop: "{{ create_users | map(attribute='username') }}"
7188
loop_control:
72-
label: "{{ item.username }}"
89+
index_var: user_index
7390
changed_when: true
7491

7592
- name: Update existing users
7693
uri:
77-
url: "{{ pulp_url }}{{ item.pulp_href }}"
94+
url: "{{ pulp_url }}{{ update_users[user_index].pulp_href }}"
7895
user: "{{ pulp_username }}"
7996
password: "{{ pulp_password }}"
8097
force_basic_auth: true
8198
method: PATCH
8299
body:
83-
username: "{{ item.username }}"
84-
password: "{{ item.password | default(None) }}"
85-
first_name: "{{ item.first_name | default(None) }}"
86-
last_name: "{{ item.last_name | default(None) }}"
87-
email: "{{ item.email | default(None) }}"
88-
is_staff: "{{ item.is_staff | default(None) }}"
89-
is_active: "{{ item.is_active | default(None) }}"
100+
username: "{{ update_users[user_index].username }}"
101+
password: "{{ update_users[user_index].password | default(None) }}"
102+
first_name: "{{ update_users[user_index].first_name | default(None) }}"
103+
last_name: "{{ update_users[user_index].last_name | default(None) }}"
104+
email: "{{ update_users[user_index].email | default(None) }}"
105+
is_staff: "{{ update_users[user_index].is_staff | default(None) }}"
106+
is_active: "{{ update_users[user_index].is_active | default(None) }}"
90107
body_format: form-urlencoded
91-
loop: "{{ update_users }}"
108+
loop: "{{ update_users | map(attribute='username') }}"
92109
loop_control:
93-
label: "{{ item.username }}"
110+
index_var: user_index
94111
register: result
95112
changed_when: true
96113

97114
- name: Add or remove user from group(s)
115+
vars:
116+
exist_users: "{{ create_users + update_users }}"
98117
include_tasks: user_groups/add_or_remove_users.yml
99118
# All users that aren't state: absent are in play here
100-
loop: "{{ create_users + update_users }}"
119+
loop: "{{ exist_users | map(attribute='username') }}"
101120
loop_control:
102-
loop_var: user
103-
label: "{{ user.username }}"
121+
index_var: user_index
104122

105123
- name: Delete users
106124
uri:
107-
url: "{{ pulp_url }}{{ item.pulp_href }}"
125+
url: "{{ pulp_url }}{{ remove_users[user_index].pulp_href }}"
108126
user: "{{ pulp_username }}"
109127
password: "{{ pulp_password }}"
110128
force_basic_auth: true
111129
method: DELETE
112130
status_code: 204
113131
body_format: form-urlencoded
114-
loop: "{{ remove_users }}"
132+
loop: "{{ remove_users | map(attribute='username') }}"
115133
loop_control:
116-
label: "{{ item.username }}"
134+
index_var: user_index
117135
changed_when: true

roles/pulp_user/tasks/user_groups/add_or_remove_users.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
- name: Remove user from groups not defined in pulp_users
44
include_tasks: remove_user_from_groups.yml
5-
loop: "{{ user.existing_groups | map(attribute='name') | difference(user.groups | default([], true)) }}"
5+
loop: "{{ exist_users[user_index].existing_groups | map(attribute='name') | difference(exist_users[user_index].groups | default([], true)) }}"
66
loop_control:
77
loop_var: remove_group
8-
when: user.existing_groups is defined
8+
when: exist_users[user_index].existing_groups is defined
99

1010
- name: Add user to groups defined in pulp_users
1111
include_tasks: add_user_to_groups.yml
12-
loop: "{{ user.groups | default([], true) | difference(user.existing_groups | default([]) | map(attribute='name') ) }}"
12+
loop: "{{ exist_users[user_index].groups | default([], true) | difference(exist_users[user_index].existing_groups | default([]) | map(attribute='name')) }}"
1313
loop_control:
1414
loop_var: add_group

roles/pulp_user/tasks/user_groups/add_user_to_groups.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
user: "{{ pulp_username }}"
3030
password: "{{ pulp_password }}"
3131
body:
32-
username: "{{ user.username }}"
32+
username: "{{ exist_users[user_index].username }}"
3333
body_format: json
3434
method: POST
3535
force_basic_auth: true

roles/pulp_user/tasks/user_groups/remove_user_from_groups.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- name: Remove user from group
66
# DELETE {{ pulp_url }}/pulp/api/v3/groups/880/users/11/
77
uri:
8-
url: "{{ pulp_url }}{{ user_group.pulp_href }}users/{{ user.id }}/"
8+
url: "{{ pulp_url }}{{ user_group.pulp_href }}users/{{ exist_users[user_index].id }}/"
99
user: "{{ pulp_username }}"
1010
password: "{{ pulp_password }}"
1111
method: DELETE
@@ -14,7 +14,7 @@
1414
force_basic_auth: true
1515
# If we get here, we're always changing something
1616
changed_when: true
17-
loop: "{{ user.existing_groups | selectattr('name', 'equalto', remove_group) }}"
17+
loop: "{{ exist_users[user_index].existing_groups | selectattr('name', 'equalto', remove_group) }}"
1818
loop_control:
1919
loop_var: user_group
20-
label: "{{ user.username }} {{ user_group.name }}"
20+
label: "{{ exist_users[user_index].username }} {{ user_group.name }}"

0 commit comments

Comments
 (0)