Skip to content
Snippets Groups Projects
Commit 1d7fb31b authored by Thomas Woerner's avatar Thomas Woerner
Browse files

ipa[user,host]: Fail on duplucate names in the users and hosts lists

It was possible to have several entries for names with the hosts and users
lists. This resulted sometimes in errors but also unexpected changes. A new
check has been added to make sure that the names in the users and hosts
lists are unique.

New tests have been added to verify this in the existing files:
- tests/host/test_hosts.yml
- tests/user/test_users.yml
parent 34f1a456
No related branches found
No related tags found
No related merge requests found
...@@ -799,10 +799,15 @@ def main(): ...@@ -799,10 +799,15 @@ def main():
server_realm = api_get_realm() server_realm = api_get_realm()
commands = [] commands = []
host_set = set()
for host in names: for host in names:
if isinstance(host, dict): if isinstance(host, dict):
name = host.get("name") name = host.get("name")
if name in host_set:
ansible_module.fail_json(
msg="host '%s' is used more than once" % name)
host_set.add(name)
description = host.get("description") description = host.get("description")
locality = host.get("locality") locality = host.get("locality")
location = host.get("location") location = host.get("location")
...@@ -1337,6 +1342,8 @@ def main(): ...@@ -1337,6 +1342,8 @@ def main():
else: else:
ansible_module.fail_json(msg="Unkown state '%s'" % state) ansible_module.fail_json(msg="Unkown state '%s'" % state)
del host_set
# Execute commands # Execute commands
errors = [] errors = []
......
...@@ -958,10 +958,15 @@ def main(): ...@@ -958,10 +958,15 @@ def main():
# commands # commands
commands = [] commands = []
user_set = set()
for user in names: for user in names:
if isinstance(user, dict): if isinstance(user, dict):
name = user.get("name") name = user.get("name")
if name in user_set:
ansible_module.fail_json(
msg="user '%s' is used more than once" % name)
user_set.add(name)
# present # present
first = user.get("first") first = user.get("first")
last = user.get("last") last = user.get("last")
...@@ -1370,6 +1375,8 @@ def main(): ...@@ -1370,6 +1375,8 @@ def main():
else: else:
ansible_module.fail_json(msg="Unkown state '%s'" % state) ansible_module.fail_json(msg="Unkown state '%s'" % state)
del user_set
# Execute commands # Execute commands
errors = [] errors = []
......
...@@ -96,3 +96,18 @@ ...@@ -96,3 +96,18 @@
state: absent state: absent
register: result register: result
failed_when: result.changed failed_when: result.changed
- name: Duplicate names in hosts failure test
ipahost:
ipaadmin_password: SomeADMINpassword
hosts:
- name: "{{ host1_fqdn }}"
force: yes
- name: "{{ host2_fqdn }}"
force: yes
- name: "{{ host3_fqdn }}"
force: yes
- name: "{{ host3_fqdn }}"
force: yes
register: result
failed_when: result.changed or "is used more than once" not in result.msg
...@@ -85,6 +85,25 @@ ...@@ -85,6 +85,25 @@
register: result register: result
failed_when: result.changed failed_when: result.changed
- name: Duplicate names in users failure test
ipauser:
ipaadmin_password: SomeADMINpassword
users:
- name: user1
givenname: user1
last: Last
- name: user2
first: user2
last: Last
- name: user3
first: user3
last: Last
- name: user3
first: user3
last: Last
register: result
failed_when: result.changed or "is used more than once" not in result.msg
- name: Remove test users - name: Remove test users
ipauser: ipauser:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment