Skip to content

Commit d7b764b

Browse files
committed
Prevent leaks when tasks fail - pulp_user
1 parent dd258eb commit d7b764b

File tree

4 files changed

+57
-53
lines changed

4 files changed

+57
-53
lines changed

roles/pulp_user/tasks/main.yml

Lines changed: 50 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,37 @@
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"
5254

5355
- name: Create users
5456
uri:
@@ -59,59 +61,61 @@
5961
method: POST
6062
status_code: 201
6163
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) }}"
64+
username: "{{ create_users[user_index].username }}"
65+
password: "{{ create_users[user_index].password | default(None) }}"
66+
first_name: "{{ create_users[user_index].first_name | default(None) }}"
67+
last_name: "{{ create_users[user_index].last_name | default(None) }}"
68+
email: "{{ create_users[user_index].email | default(None) }}"
69+
is_staff: "{{ create_users[user_index].is_staff | default(None) }}"
70+
is_active: "{{ create_users[user_index].is_active | default(None) }}"
6971
body_format: form-urlencoded
70-
loop: "{{ create_users }}"
72+
loop: "{{ create_users | map(attribute='username') }}"
7173
loop_control:
72-
label: "{{ item.username }}"
74+
index_var: user_index
7375
changed_when: true
7476

77+
# Will always mark as changed even if user is the same as described
7578
- name: Update existing users
7679
uri:
77-
url: "{{ pulp_url }}{{ item.pulp_href }}"
80+
url: "{{ pulp_url }}{{ update_users[user_index].pulp_href }}"
7881
user: "{{ pulp_username }}"
7982
password: "{{ pulp_password }}"
8083
force_basic_auth: true
8184
method: PATCH
8285
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) }}"
86+
username: "{{ update_users[user_index].username }}"
87+
password: "{{ update_users[user_index].password | default(None) }}"
88+
first_name: "{{ update_users[user_index].first_name | default(None) }}"
89+
last_name: "{{ update_users[user_index].last_name | default(None) }}"
90+
email: "{{ update_users[user_index].email | default(None) }}"
91+
is_staff: "{{ update_users[user_index].is_staff | default(None) }}"
92+
is_active: "{{ update_users[user_index].is_active | default(None) }}"
9093
body_format: form-urlencoded
91-
loop: "{{ update_users }}"
94+
loop: "{{ update_users | map(attribute='username') }}"
9295
loop_control:
93-
label: "{{ item.username }}"
96+
index_var: user_index
9497
register: result
9598
changed_when: true
9699

97100
- name: Add or remove user from group(s)
101+
vars:
102+
exist_users: "{{ create_users + update_users }}"
98103
include_tasks: user_groups/add_or_remove_users.yml
99104
# All users that aren't state: absent are in play here
100-
loop: "{{ create_users + update_users }}"
105+
loop: "{{ exist_users | map(attribute='username') }}"
101106
loop_control:
102-
loop_var: user
103-
label: "{{ user.username }}"
107+
index_var: user_index
104108

105109
- name: Delete users
106110
uri:
107-
url: "{{ pulp_url }}{{ item.pulp_href }}"
111+
url: "{{ pulp_url }}{{ remove_users[user_index].pulp_href }}"
108112
user: "{{ pulp_username }}"
109113
password: "{{ pulp_password }}"
110114
force_basic_auth: true
111115
method: DELETE
112116
status_code: 204
113117
body_format: form-urlencoded
114-
loop: "{{ remove_users }}"
118+
loop: "{{ remove_users | map(attribute='username') }}"
115119
loop_control:
116-
label: "{{ item.username }}"
120+
index_var: user_index
117121
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)