diff options
author | James Cammarata <jimi@sngx.net> | 2014-07-25 08:59:26 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2014-07-25 11:50:22 -0500 |
commit | f4f18a6375f8574ed80d7c3428686417b154fe92 (patch) | |
tree | 4ff97797779e81c11f456bedc009ce5f35e83762 | |
parent | 88c0d2b50872accecc8646ce63aa3dd5495dbbd4 (diff) | |
download | ansible-f4f18a6375f8574ed80d7c3428686417b154fe92.tar.gz |
Fix for unicode decoding error in new splitting code
Also adds a new unicode integration test
-rw-r--r-- | lib/ansible/utils/splitter.py | 9 | ||||
-rw-r--r-- | test/integration/Makefile | 3 | ||||
-rw-r--r-- | test/integration/unicode.yml | 42 |
3 files changed, 52 insertions, 2 deletions
diff --git a/lib/ansible/utils/splitter.py b/lib/ansible/utils/splitter.py index d4ae773b2b..9cd218291c 100644 --- a/lib/ansible/utils/splitter.py +++ b/lib/ansible/utils/splitter.py @@ -70,7 +70,11 @@ def split_args(args): # here we encode the args, so we have a uniform charset to # work with, and split on white space - args = args.encode('utf-8') + try: + args = args.encode('utf-8') + do_decode = True + except UnicodeDecodeError: + do_decode = False tokens = args.split() # iterate over the tokens, and reassemble any that may have been @@ -146,7 +150,8 @@ def split_args(args): raise Exception("error while splitting arguments, either an unbalanced jinja2 block or quotes") # finally, we decode each param back to the unicode it was in the arg string - params = [x.decode('utf-8') for x in params] + if do_decode: + params = [x.decode('utf-8') for x in params] return params def unquote(data): diff --git a/test/integration/Makefile b/test/integration/Makefile index 6e47a86f80..c15c185aad 100644 --- a/test/integration/Makefile +++ b/test/integration/Makefile @@ -23,6 +23,9 @@ parsing: ansible-playbook bad_parsing.yml -i $(INVENTORY) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -vvv $(TEST_FLAGS) --tags common,scenario4; [ $$? -eq 3 ] ansible-playbook good_parsing.yml -i $(INVENTORY) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -v $(TEST_FLAGS) +unicode: + ansible-playbook unicode.yml -i $(INVENTORY) -e @$(VARS_FILE) -v $(TEST_FLAGS) + non_destructive: ansible-playbook non_destructive.yml -i $(INVENTORY) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -v $(TEST_FLAGS) diff --git a/test/integration/unicode.yml b/test/integration/unicode.yml new file mode 100644 index 0000000000..eea6293dc2 --- /dev/null +++ b/test/integration/unicode.yml @@ -0,0 +1,42 @@ +--- +- name: 'A play with unicode: ¢ £ ¤ ¥' + hosts: localhost + connection: local + vars: + test_var: 'Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ' + num_hosts: 5 + hostnames: + - 'host-#ϬϭϮϯϰ' + - 'host-ͰͱͲͳʹ͵' + - 'host-ΙΚΛΜΝΞ' + - 'host-στυφχψ' + - 'host-ϬϭϮϯϰϱ' + + tasks: + - name: 'A task name with unicode: è é ê ë' + debug: msg='hi there' + + - name: 'A task with unicode parameters' + debug: var=test_var + + # € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ®' + + - name: 'A task using with_items containing unicode' + debug: msg='{{item}}' + with_items: + - '¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö ×' + - 'Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Ā' + - 'ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ' + + - add_host: + name: '{{hostnames}}.{{item}}' + groups: 'ĪīĬĭ' + ansible_connection: local + host_id: '{{item}}' + with_sequence: start=1 end={{num_hosts}} format=%d + +- name: 'A play for hosts in group: ĪīĬĭ' + hosts: 'ĪīĬĭ' + gather_facts: true + tasks: + - debug: msg='Unicode is a good thing ™' |