From cd77ea3c7f3d25501f45574ee4bfef45f2c41dd2 Mon Sep 17 00:00:00 2001 From: Sloane Hertel Date: Fri, 7 Jun 2019 21:27:38 -0400 Subject: [PATCH] File module - fix unicode paths and add a test (#57558) * File module - Fix unicode paths * Add a test for unicode paths for the file module --- lib/ansible/modules/files/file.py | 3 ++- test/integration/targets/file/tasks/main.yml | 6 ++++++ test/integration/targets/file/tasks/unicode_path.yml | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/integration/targets/file/tasks/unicode_path.yml 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