From 2267ba2f05f04d967478fa40bd31ec4a95da5df8 Mon Sep 17 00:00:00 2001 From: Sam Doran Date: Thu, 19 Jul 2018 10:07:00 -0400 Subject: [PATCH] Only report change when home directory is different on FreeBSD (#42865) * Only report change when home directory is different Add tests with home: parameter Have to skip macOS for now since there is a bug when specifying the home directory path for an existing user that results in a module failure. That needs to be fixed in a separate PR. (cherry picked from commit 0ca61e9d87bdb86c6a7fa2884d81f4e929a41a5e) --- .../user_freebsd_always_changed_bugfix.yaml | 2 + lib/ansible/modules/system/user.py | 5 +- test/integration/targets/user/tasks/main.yml | 53 +++++++++++++++++-- test/integration/targets/user/vars/main.yml | 5 ++ 4 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 changelogs/fragments/user_freebsd_always_changed_bugfix.yaml create mode 100644 test/integration/targets/user/vars/main.yml diff --git a/changelogs/fragments/user_freebsd_always_changed_bugfix.yaml b/changelogs/fragments/user_freebsd_always_changed_bugfix.yaml new file mode 100644 index 00000000000..c4d88abfd9d --- /dev/null +++ b/changelogs/fragments/user_freebsd_always_changed_bugfix.yaml @@ -0,0 +1,2 @@ +bugfixes: + - user - fix bug that resulted in module always reporting a change when specifiying the home directory on FreeBSD (https://github.com/ansible/ansible/issues/42484) diff --git a/lib/ansible/modules/system/user.py b/lib/ansible/modules/system/user.py index a55b01c531b..25de6a2bfd5 100644 --- a/lib/ansible/modules/system/user.py +++ b/lib/ansible/modules/system/user.py @@ -1010,8 +1010,9 @@ class FreeBsdUser(User): if self.home is not None: if (info[5] != self.home and self.move_home) or (not os.path.exists(self.home) and self.create_home): cmd.append('-m') - cmd.append('-d') - cmd.append(self.home) + if info[5] != self.home: + cmd.append('-d') + cmd.append(self.home) if self.skeleton is not None: cmd.append('-k') diff --git a/test/integration/targets/user/tasks/main.yml b/test/integration/targets/user/tasks/main.yml index ee20aac5bea..329710cb781 100644 --- a/test/integration/targets/user/tasks/main.yml +++ b/test/integration/targets/user/tasks/main.yml @@ -37,7 +37,13 @@ user: name: ansibulluser state: present - register: user_test0 + register: user_test0_0 + +- name: create the user again + user: + name: ansibulluser + state: present + register: user_test0_1 - debug: var: user_test0 @@ -54,9 +60,50 @@ - name: validate results for testcase 0 assert: that: - - user_test0 is changed + - user_test0_0 is changed + - user_test0_1 is not changed - '"ansibulluser" in user_names.stdout_lines' +# https://github.com/ansible/ansible/issues/42484 +# Skipping macOS for now since there is a bug when changing home directory +- block: + - name: create user specifying home + user: + name: ansibulluser + state: present + home: "{{ user_home_prefix[ansible_system] }}/ansibulluser" + register: user_test3_0 + + - name: create user again specifying home + user: + name: ansibulluser + state: present + home: "{{ user_home_prefix[ansible_system] }}/ansibulluser" + register: user_test3_1 + + - name: change user home + user: + name: ansibulluser + state: present + home: "{{ user_home_prefix[ansible_system] }}/ansibulluser-mod" + register: user_test3_2 + + - name: change user home back + user: + name: ansibulluser + state: present + home: "{{ user_home_prefix[ansible_system] }}/ansibulluser" + register: user_test3_3 + + - name: validate results for testcase 3 + assert: + that: + - user_test3_0 is not changed + - user_test3_1 is not changed + - user_test3_2 is changed + - user_test3_3 is changed + when: ansible_system != 'Darwin' + ## user check @@ -65,7 +112,7 @@ name: "{{ user_names.stdout_lines | random }}" state: present create_home: no - with_sequence: start=1 end=5 + loop: "{{ range(1, 5+1) | list }}" register: user_test1 - debug: diff --git a/test/integration/targets/user/vars/main.yml b/test/integration/targets/user/vars/main.yml new file mode 100644 index 00000000000..f5d3b3f332b --- /dev/null +++ b/test/integration/targets/user/vars/main.yml @@ -0,0 +1,5 @@ +user_home_prefix: + Linux: '/home' + FreeBSD: '/home' + SunOS: '/home' + Darwin: '/Users'