Skip to content

Commit c143810

Browse files
authored
Enhancement to sudoers role to add groups and work with user sync (#50)
Signed-off-by: Jim Enright <jenright@cloudera.com>
1 parent 5361f45 commit c143810

File tree

4 files changed

+27
-38
lines changed

4 files changed

+27
-38
lines changed

roles/sudoers/defaults/main.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@
2121
# Variables used as inputs in main.yml
2222
sudoers__env_admin_password: "{{ common__env_admin_password }}"
2323

24-
sudoers__sudo_group_name: sudoers
25-
sudoers__sudo_group_users: []
26-
# Flag to determine if we want to remove (=True) or retain (=False) existing users in sudoers group
27-
sudoers__purge_users_in_group: False
24+
# sudoers__sudo_group_name: sudoers
25+
sudoers__sudo_users: []
26+
sudoers__sudo_groups: [] # the groups that are members of the sudo_rule
27+
28+
# Flag to determine if we want to remove (=True) or retain (=False) existing users in sudo rule
29+
sudoers__purge_users: False
30+
# Flag to determine if we want to remove (=True) or retain (=False) existing group members in sudo rule
31+
sudoers__purge_groups: False
2832

2933
sudoers__sudorule_name: admin_all_rule

roles/sudoers/meta/main.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
galaxy_info:
1616
author: Jim Enright (jenright@cloudera.com)
1717
description: >
18-
Add specified users to FreeIPA sudoers group and create a passwordless sudo rule for the group.
19-
Existing group members can be purged or retained depending on the value of the sudoers__purge_users_in_group flag.
18+
Create a passwordless sudo rule and add specified users and/or groups as members to this rule.
19+
Existing group members and users can be purged or retained depending on the value of
20+
the sudoers__purge_groups and sudoers__purge_users flags.
2021
company: Cloudera
2122
license: Apache-2.0
2223

roles/sudoers/tasks/main.yml

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,38 +14,31 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616

17-
# If don't want to purge existing users from the FreeIPA group,
18-
# we'll query the group to get current users
17+
# If don't want to purge existing users (and groups) from the FreeIPA sudo rule,
18+
# we'll query the rule to get current users (and groups)
1919
- name: Query sudoers group for list of users
20-
when: not sudoers__purge_users_in_group
20+
when: (not sudoers__purge_users) or (not sudoers__purge_groups)
2121
block:
22-
# Note - below creates the group if it doesn't already exist
23-
- name: Create or query the sudoers group
24-
community.general.ipa_group:
22+
# Note - below creates the rule if it doesn't already exist
23+
- name: Create or query the sudo rule
24+
community.general.ipa_sudorule:
2525
ipa_user: "{{ sudoers__env_admin_username }}"
2626
ipa_pass: "{{ sudoers__env_admin_password }}"
27-
name: "{{ sudoers__sudo_group_name }}"
27+
name: "{{ sudoers__sudorule_name }}"
2828
state: present
29-
register: sudoers_group
29+
register: sudo_rule_details
3030

31-
- name: Set facts for current user members of the group
31+
- name: Set facts for current user and group members of the sudo rule
3232
ansible.builtin.set_fact:
33-
__sudo_existing_group_users: "{{ sudoers_group.group.member_user | default([]) }}"
33+
__sudo_existing_users: "{{ sudo_rule_details.sudorule.memberuser_user | default([]) }}"
34+
__sudo_existing_groups: "{{ sudo_rule_details.sudorule.memberuser_group | default([]) }}"
3435

35-
# Final list of users to add to sudoers group -
36+
# Final list of users and groups to add to sudoers group -
3637
# either combined with existing group members or overrides
3738
- name: Create list of users to add to sudoers group
3839
ansible.builtin.set_fact:
39-
__sudo_group_users: "{{ sudoers__sudo_group_users | union(__sudo_existing_group_users) if not sudoers__purge_users_in_group else sudoers__sudo_group_users }}"
40-
41-
# Create a FreeIPA group for sudo and add users
42-
- name: Add users to the sudoers group
43-
community.general.ipa_group:
44-
ipa_user: "{{ sudoers__env_admin_username }}"
45-
ipa_pass: "{{ sudoers__env_admin_password }}"
46-
name: "{{ sudoers__sudo_group_name }}"
47-
user: "{{ __sudo_group_users }}"
48-
state: present
40+
__sudo_users: "{{ sudoers__sudo_users | union(__sudo_existing_users) if not sudoers__purge_users else sudoers__sudo_users }}"
41+
__sudo_groups: "{{ sudoers__sudo_groups | union(__sudo_existing_groups) if not sudoers__purge_groups else sudoers__sudo_groups }}"
4942

5043
# Create FreeIPA sudo rule
5144
- name: Add sudo rule for passwordless sudo
@@ -56,6 +49,6 @@
5649
cmdcategory: all
5750
hostcategory: all
5851
sudoopt: "!authenticate"
59-
usergroup:
60-
- "{{ sudoers__sudo_group_name }}"
52+
user: "{{ __sudo_users }}"
53+
usergroup: "{{ __sudo_groups }}"
6154
state: present

roles/sudoers/tasks/teardown.yml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,3 @@
2121
ipa_pass: "{{ sudoers__env_admin_password }}"
2222
name: "{{ sudoers__sudorule_name }}"
2323
state: absent
24-
25-
# Remove the FreeIPA group for sudo
26-
- name: Remove sudoers group
27-
community.general.ipa_group:
28-
ipa_user: "{{ sudoers__env_admin_username }}"
29-
ipa_pass: "{{ sudoers__env_admin_password }}"
30-
name: "{{ sudoers__sudo_group_name }}"
31-
state: absent
32-
register: sudoers_group

0 commit comments

Comments
 (0)