[stable-2.8] Don't warn if local user is found in user database (#56838)

If the 'local' parameter of the 'user' Ansible module is enabled, and
the user has been found in the local user database, don't emit
a warning, because this is an expected outcome.

Add changelog and integration tests

Co-authored-by: drybed <drybjed@gmail.com>
(cherry picked from commit 75be309242)

Co-authored-by: Maciej Delmanowski <drybjed@drybjed.net>
This commit is contained in:
Maciej Delmanowski 2019-07-31 18:14:22 +02:00 committed by Toshio Kuratomi
parent e5759e587a
commit 703618336f
3 changed files with 20 additions and 6 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- 'user - do not warn when using ``local: yes`` if user already exists (https://github.com/ansible/ansible/issues/58063)'

View file

@ -863,9 +863,11 @@ class User(object):
exists = True exists = True
break break
self.module.warn( if not exists:
"'local: true' specified and user was not found in {file}. " self.module.warn(
"The local user account may already exist if the local account database exists somewhere other than {file}.".format(file=self.PASSWORDFILE)) "'local: true' specified and user '{name}' was not found in {file}. "
"The local user account may already exist if the local account database exists "
"somewhere other than {file}.".format(file=self.PASSWORDFILE, name=self.name))
return exists return exists

View file

@ -829,6 +829,14 @@
tags: tags:
- user_test_local_mode - user_test_local_mode
- name: Create local account that already exists to check for warning
user:
name: root
local: yes
register: local_existing
tags:
- user_test_local_mode
- name: Create local_ansibulluser - name: Create local_ansibulluser
user: user:
name: local_ansibulluser name: local_ansibulluser
@ -909,10 +917,12 @@
tags: tags:
- user_test_local_mode - user_test_local_mode
- name: Ensure warnings were displayed - name: Ensure warnings were displayed properly
assert: assert:
that: that:
- local_user_test_1['warnings'] | length > 0 - local_user_test_1['warnings'] | length > 0
- "'user was not found in /etc/passwd. The local user account may already exist if the local account - local_user_test_1['warnings'] | first is search('The local user account may already exist')
database exists somewhere other than /etc/passwd.' in local_user_test_1['warnings'][0]" - local_existing['warnings'] is not defined
when: ansible_facts.system in ['Linux'] when: ansible_facts.system in ['Linux']
tags:
- user_test_local_mode