Skip to content

Commit

Permalink
Merge pull request #469 from rjeffman/fix_role_add_privileges
Browse files Browse the repository at this point in the history
Fix handling members in ipa role.
  • Loading branch information
t-woerner committed Jan 7, 2021
2 parents 29dc21a + 67179a8 commit 27a8053
Show file tree
Hide file tree
Showing 5 changed files with 311 additions and 18 deletions.
11 changes: 7 additions & 4 deletions plugins/modules/iparole.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ def filter_service(module, res_find, predicate):
return _services


def ensure_role_with_members_is_present(module, name, res_find):
def ensure_role_with_members_is_present(module, name, res_find, action):
"""Define commands to ensure member are present for action `role`."""
commands = []
privilege_add, privilege_del = gen_add_del_lists(
Expand All @@ -267,7 +267,7 @@ def ensure_role_with_members_is_present(module, name, res_find):
if privilege_add:
commands.append([name, "role_add_privilege",
{"privilege": privilege_add}])
if privilege_del:
if action == "role" and privilege_del:
commands.append([name, "role_remove_privilege",
{"privilege": privilege_del}])

Expand Down Expand Up @@ -297,7 +297,8 @@ def ensure_role_with_members_is_present(module, name, res_find):

if add_members:
commands.append([name, "role_add_member", add_members])
if del_members:
# Only remove members if ensuring role, not acting on members.
if action == "role" and del_members:
commands.append([name, "role_remove_member", del_members])

return commands
Expand Down Expand Up @@ -405,7 +406,9 @@ def role_commands_for_name(module, state, action, name):
if res_find is None:
module.fail_json(msg="No role '%s'" % name)

cmds = ensure_role_with_members_is_present(module, name, res_find)
cmds = ensure_role_with_members_is_present(
module, name, res_find, action
)
commands.extend(cmds)

if state == "absent" and res_find is not None:
Expand Down
21 changes: 16 additions & 5 deletions tests/role/env_cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,42 @@
- name: Ensure test user is absent.
ipauser:
ipaadmin_password: SomeADMINpassword
name: user01
name:
- user01
- user02
- user03
state: absent

- name: Ensure test group is absent.
ipagroup:
ipaadmin_password: SomeADMINpassword
name: group01
name:
- group01
- group02
state: absent

- name: Ensure test hostgroup is absent.
ipahostgroup:
ipaadmin_password: SomeADMINpassword
name: hostgroup01
name:
- hostgroup01
- hostgroup02
state: absent

- name: Ensure test host is absent.
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ host1_fqdn }}"
name:
- "{{ host1_fqdn }}"
- "{{ host2_fqdn }}"
state: absent

- name: Ensure test service is absent.
ipaservice:
ipaadmin_password: SomeADMINpassword
name: "service01/{{ host1_fqdn }}"
name:
- "service01/{{ host1_fqdn }}"
- "service02/{{ host2_fqdn }}"
state: absent

- name: Ensure test roles are absent.
Expand Down
3 changes: 2 additions & 1 deletion tests/role/env_facts.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
- name: Get Domain from server name
set_fact:
ipaserver_domain: "{{ ansible_fqdn | join ('.') }}"
ipaserver_domain: "{{ ansible_fqdn.split('.')[1:] | join ('.') }}"
when: ipaserver_domain is not defined

- name: Set fact for realm name
Expand All @@ -12,3 +12,4 @@
- name: Create FQDN for host01
set_fact:
host1_fqdn: "host01.{{ ipaserver_domain }}"
host2_fqdn: "host02.{{ ipaserver_domain }}"
35 changes: 27 additions & 8 deletions tests/role/env_setup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,49 @@
- name: Ensure test user is present.
ipauser:
ipaadmin_password: SomeADMINpassword
name: user01
first: First
last: Last
users:
- name: user01
first: First
last: Last
- name: user02
first: First
last: Last
- name: user03
first: First
last: Last

- name: Ensure test group is present.
ipagroup:
ipaadmin_password: SomeADMINpassword
name: group01
name: "{{ item }}"
with_items:
- group01
- group02

- name: Ensure test host is present.
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ host1_fqdn }}"
name: "{{ item }}"
force: yes
with_items:
- "{{ host1_fqdn }}"
- "{{ host2_fqdn }}"

- name: Ensure test hostgroup is present.
ipahostgroup:
ipaadmin_password: SomeADMINpassword
name: hostgroup01
name: "{{ item[0] }}"
host:
- "{{ host1_fqdn }}"
- "{{ item[1] }}"
with_nested:
- [hostgroup01, hostgroup02]
- ["{{ host1_fqdn }}", "{{ host2_fqdn }}"]

- name: Ensure test service is present.
ipaservice:
ipaadmin_password: SomeADMINpassword
name: "service01/{{ host1_fqdn }}"
name: "{{ item }}"
force: yes
with_items:
- "service01/{{ host1_fqdn }}"
- "service02/{{ host2_fqdn }}"

0 comments on commit 27a8053

Please sign in to comment.