diff --git a/lib/ansible/modules/files/file.py b/lib/ansible/modules/files/file.py index 28134da148..5c05f11952 100644 --- a/lib/ansible/modules/files/file.py +++ b/lib/ansible/modules/files/file.py @@ -372,7 +372,8 @@ def initial_diff(path, state, prev_state): 'directories': [], 'files': [], } - for base_path, sub_folders, files in os.walk(path): + b_path = to_bytes(path, errors='surrogate_or_strict') + for base_path, sub_folders, files in os.walk(b_path): for folder in sub_folders: folderpath = os.path.join(base_path, folder) walklist['directories'].append(folderpath) diff --git a/test/integration/targets/file/tasks/main.yml b/test/integration/targets/file/tasks/main.yml index 6c03f5a8ab..09796df4e8 100644 --- a/test/integration/targets/file/tasks/main.yml +++ b/test/integration/targets/file/tasks/main.yml @@ -32,6 +32,12 @@ - name: Run tests for directory as dest include: directory_as_dest.yml +- name: Run tests for unicode + include: unicode_path.yml + environment: + LC_ALL: C + LANG: C + - name: decide to include or not include selinux tests include: selinux_tests.yml when: selinux_installed is defined and selinux_installed.stdout != "" and selinux_enabled.stdout != "Disabled" diff --git a/test/integration/targets/file/tasks/unicode_path.yml b/test/integration/targets/file/tasks/unicode_path.yml new file mode 100644 index 0000000000..d78af76564 --- /dev/null +++ b/test/integration/targets/file/tasks/unicode_path.yml @@ -0,0 +1,10 @@ +- name: create local file with unicode filename and content + lineinfile: + dest: "{{ output_dir }}/语/汉语.txt" + create: true + line: 汉语 + +- name: remove local file with unicode filename and content + file: + path: "{{ output_dir }}/语/汉语.txt" + state: absent