|
1 | 1 | --- |
2 | | - |
3 | | -- name: Get user list |
| 2 | +- name: Get information for each user |
4 | 3 | uri: |
5 | | - url: "{{ pulp_user_url }}" |
| 4 | + url: "{{ pulp_user_url }}?username={{ item.username }}" |
6 | 5 | user: "{{ pulp_username }}" |
7 | 6 | password: "{{ pulp_password }}" |
8 | 7 | method: GET |
9 | 8 | status_code: 200 |
10 | 9 | force_basic_auth: true |
11 | | - register: users_list_result |
| 10 | + loop: "{{ pulp_users }}" |
| 11 | + register: users_get_result |
| 12 | + |
| 13 | +- name: Reset users facts |
| 14 | + set_fact: |
| 15 | + remove_users: [] |
| 16 | + create_users: [] |
| 17 | + update_users: [] |
| 18 | + |
| 19 | +- name: Set users to delete fact |
| 20 | + set_fact: |
| 21 | + remove_users: "{{ remove_users + [user.json.results[0]] }}" |
| 22 | + loop: "{{ users_get_result.results }}" |
| 23 | + loop_control: |
| 24 | + loop_var: "user" |
| 25 | + label: "{{ user.item.username }}" |
| 26 | + when: |
| 27 | + - user.json.count == 1 |
| 28 | + - user.item.state is defined |
| 29 | + - user.item.state == "absent" |
12 | 30 |
|
13 | | -- name: Set fact remove_users |
| 31 | +- name: Set users to create fact |
14 | 32 | set_fact: |
15 | | - remove_users: "{{ (remove_users | default([])) + [item.username] }}" |
16 | | - when: item.state is defined and item.state == 'absent' |
17 | | - with_items: "{{ pulp_users }}" |
| 33 | + create_users: "{{ create_users + [user.item] }}" |
| 34 | + loop: "{{ users_get_result.results }}" |
| 35 | + loop_control: |
| 36 | + loop_var: "user" |
| 37 | + label: "{{ user.item.username }}" |
| 38 | + when: |
| 39 | + - user.json.count == 0 |
| 40 | + - user.item.state is not defined or user.item.state != "absent" |
| 41 | + |
| 42 | +- name: Set users to update fact |
| 43 | + 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 }}" |
| 46 | + loop_control: |
| 47 | + loop_var: "user" |
| 48 | + label: "{{ user.item.username }}" |
| 49 | + when: |
| 50 | + - user.json.count == 1 |
| 51 | + - user.item.state is not defined or user.item.state != "absent" |
18 | 52 |
|
19 | 53 | - name: Create users |
20 | | - vars: |
21 | | - usernames: "{{ users_list_result.json.results | map(attribute='username') | list }}" |
22 | 54 | uri: |
23 | 55 | url: "{{ pulp_user_url }}" |
24 | 56 | user: "{{ pulp_username }}" |
|
35 | 67 | is_staff: "{{ item.is_staff | default(None) }}" |
36 | 68 | is_active: "{{ item.is_active | default(None) }}" |
37 | 69 | body_format: form-urlencoded |
38 | | - loop: "{{ pulp_users }}" |
| 70 | + loop: "{{ create_users }}" |
39 | 71 | loop_control: |
40 | 72 | label: "{{ item.username }}" |
41 | | - register: result |
42 | | - when: |
43 | | - - item.username not in usernames |
44 | | - - item.state is not defined or item.state != 'absent' |
45 | | - changed_when: result.status == 201 |
| 73 | + changed_when: true |
46 | 74 |
|
47 | 75 | - name: Update existing users |
48 | | - vars: |
49 | | - usernames: "{{ users_list_result.json.results | map(attribute='username') | list }}" |
50 | | - url_query: "[?username=='{{ item.username }}'].pulp_href" |
51 | 76 | uri: |
52 | | - url: "{{ pulp_url }}{{ users_list_result.json.results | json_query(url_query) | first }}" |
| 77 | + url: "{{ pulp_url }}{{ item.pulp_href }}" |
53 | 78 | user: "{{ pulp_username }}" |
54 | 79 | password: "{{ pulp_password }}" |
55 | 80 | force_basic_auth: true |
|
63 | 88 | is_staff: "{{ item.is_staff | default(None) }}" |
64 | 89 | is_active: "{{ item.is_active | default(None) }}" |
65 | 90 | body_format: form-urlencoded |
66 | | - loop: "{{ pulp_users }}" |
| 91 | + loop: "{{ update_users }}" |
67 | 92 | loop_control: |
68 | 93 | label: "{{ item.username }}" |
69 | 94 | register: result |
70 | | - when: |
71 | | - - item.username in usernames |
72 | | - - item.state is not defined or item.state != 'absent' |
73 | | - changed_when: |
74 | | - # The pulp API currently does not report when a change is made, so we must |
75 | | - # manually check |
76 | | - - result.json not in users_list_result.json.results |
77 | | - - result.status == 200 |
| 95 | + changed_when: true |
78 | 96 |
|
79 | 97 | - name: Add or remove user from group(s) |
80 | 98 | include_tasks: user_groups/add_or_remove_users.yml |
81 | | - # Noop if pulp_users is defined but empty |
82 | | - loop: "{{ pulp_users }}" |
83 | | - when: item.state is not defined or item.state != 'absent' |
| 99 | + # All users that aren't state: absent are in play here |
| 100 | + loop: "{{ create_users + update_users }}" |
84 | 101 | loop_control: |
85 | 102 | loop_var: user |
86 | | - |
87 | | -- name: Initialise hrefs |
88 | | - set_fact: |
89 | | - hrefs: [] |
90 | | - |
91 | | -- name: Set fact hrefs |
92 | | - set_fact: |
93 | | - hrefs: "{{ (hrefs | default([])) + [item.pulp_href] }}" |
94 | | - when: item.username in (remove_users | default([])) |
95 | | - with_items: "{{ users_list_result.json.results }}" |
| 103 | + label: "{{ user.username }}" |
96 | 104 |
|
97 | 105 | - name: Delete users |
98 | 106 | uri: |
99 | | - url: "{{ pulp_url }}{{ item }}" |
| 107 | + url: "{{ pulp_url }}{{ item.pulp_href }}" |
100 | 108 | user: "{{ pulp_username }}" |
101 | 109 | password: "{{ pulp_password }}" |
102 | 110 | force_basic_auth: true |
103 | 111 | method: DELETE |
104 | 112 | status_code: 204 |
105 | 113 | body_format: form-urlencoded |
106 | | - loop: "{{ hrefs }}" |
107 | | - register: result |
108 | | - changed_when: result.status == 204 |
| 114 | + loop: "{{ remove_users }}" |
| 115 | + loop_control: |
| 116 | + label: "{{ item.username }}" |
| 117 | + changed_when: true |
0 commit comments