diff --git a/lib/ansible/utils/path.py b/lib/ansible/utils/path.py index d8dc4234265..1fe62e85940 100644 --- a/lib/ansible/utils/path.py +++ b/lib/ansible/utils/path.py @@ -19,6 +19,7 @@ __metaclass__ = type import os from errno import EEXIST +from ansible.utils.unicode import to_bytes __all__ = ['unfrackpath'] @@ -33,7 +34,7 @@ def unfrackpath(path): def makedirs_safe(path, mode=None): '''Safe way to create dirs in muliprocess/thread environments''' - if not os.path.exists(path): + if not os.path.exists(to_bytes(path, errors='strict')): try: if mode: os.makedirs(path, mode) diff --git a/test/integration/test_connection.yml b/test/integration/test_connection.yml index 5b3d4f1bc3c..27f24aafd6b 100644 --- a/test/integration/test_connection.yml +++ b/test/integration/test_connection.yml @@ -14,18 +14,20 @@ ### copy local file with unicode filename and content - name: create local file with unicode filename and content - local_action: lineinfile dest=/tmp/ansible-local-汉语 create=true line=汉语 + local_action: lineinfile dest=/tmp/ansible-local-汉语/汉语.txt create=true line=汉语 - name: remove remote file with unicode filename and content - file: path=/tmp/ansible-remote-汉语 state=absent + file: path=/tmp/ansible-remote-汉语/汉语.txt state=absent + - name: create remote directory with unicode name + file: path=/tmp/ansible-remote-汉语 state=directory - name: copy local file with unicode filename and content - copy: src=/tmp/ansible-local-汉语 dest=/tmp/ansible-remote-汉语 + copy: src=/tmp/ansible-local-汉语/汉语.txt dest=/tmp/ansible-remote-汉语/汉语.txt ### fetch remote file with unicode filename and content - name: remove local file with unicode filename and content - local_action: file path=/tmp/ansible-local-汉语 state=absent + local_action: file path=/tmp/ansible-local-汉语/汉语.txt state=absent - name: fetch remote file with unicode filename and content - fetch: src=/tmp/ansible-remote-汉语 dest=/tmp/ansible-local-汉语 fail_on_missing=true validate_checksum=true flat=true + fetch: src=/tmp/ansible-remote-汉语/汉语.txt dest=/tmp/ansible-local-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true ### remove local and remote temp files