diff --git a/lib/ansible/plugins/action/net_put.py b/lib/ansible/plugins/action/net_put.py index 65acfc97f13..30fa7dff924 100644 --- a/lib/ansible/plugins/action/net_put.py +++ b/lib/ansible/plugins/action/net_put.py @@ -83,9 +83,13 @@ class ActionModule(ActionBase): src = self._task.args.get('src') filename = str(uuid.uuid4()) cwd = self._loader.get_basedir() - output_file = cwd + '/' + filename - with open(output_file, 'w') as f: - f.write(src) + output_file = os.path.join(cwd, filename) + try: + with open(output_file, 'wb') as f: + f.write(to_bytes(src, encoding='utf-8')) + except Exception: + os.remove(output_file) + raise else: try: output_file = self._get_binary_src_file(src) diff --git a/test/integration/targets/ios_file/nonascii.bin b/test/integration/targets/ios_file/nonascii.bin index 7f914adc9d2..14c6ddb1b89 100644 Binary files a/test/integration/targets/ios_file/nonascii.bin and b/test/integration/targets/ios_file/nonascii.bin differ diff --git a/test/integration/targets/ios_file/tests/cli/net_get.yaml b/test/integration/targets/ios_file/tests/cli/net_get.yaml index b8e4708b3f9..906429f534a 100644 --- a/test/integration/targets/ios_file/tests/cli/net_get.yaml +++ b/test/integration/targets/ios_file/tests/cli/net_get.yaml @@ -19,14 +19,14 @@ - name: setup (remove file from localhost if present) file: - path: ios_{{ ansible_host }}.cfg + path: ios_{{ inventory_hostname }}.cfg state: absent delegate_to: localhost - name: get the file from device with relative destination net_get: src: ios1.cfg - dest: 'ios_{{ ansible_host }}.cfg' + dest: 'ios_{{ inventory_hostname }}.cfg' register: result - assert: @@ -36,11 +36,17 @@ - name: Idempotency check net_get: src: ios1.cfg - dest: 'ios_{{ ansible_host }}.cfg' + dest: 'ios_{{ inventory_hostname }}.cfg' register: result - assert: that: - result.changed == false +- name: setup (remove file from localhost if present) + file: + path: ios_{{ inventory_hostname }}.cfg + state: absent + delegate_to: localhost + - debug: msg="END ios cli/net_get.yaml on connection={{ ansible_connection }}" diff --git a/test/integration/targets/ios_file/tests/cli/net_put.yaml b/test/integration/targets/ios_file/tests/cli/net_put.yaml index 92c9a43088a..d7c1b036308 100644 --- a/test/integration/targets/ios_file/tests/cli/net_put.yaml +++ b/test/integration/targets/ios_file/tests/cli/net_put.yaml @@ -1,5 +1,6 @@ --- -- debug: msg="START ios cli/net_put.yaml on connection={{ ansible_connection }}" +- debug: + msg: "START ios cli/net_put.yaml on connection={{ ansible_connection }}" # Add minimal testcase to check args are passed correctly to # implementation module and module run is successful. @@ -12,22 +13,13 @@ - username {{ ansible_ssh_user }} privilege 15 match: none -- name: Delete existing file ios1.cfg if presen on remote host +- name: Delete existing files if present on remote host ios_command: - commands: - - command: 'delete /force ios1.cfg' - ignore_errors: true - -- name: Delete existing file ios.cfg if presen on remote host - ios_command: - commands: - - command: 'delete /force ios.cfg' - ignore_errors: true - -- name: Delete existing file nonascii.bin if presen on remote host - ios_command: - commands: - - command: 'delete /force nonascii.bin' + commands: "{{ item }}" + loop: + - delete /force ios1.cfg + - delete /force ios.cfg + - delete /force nonascii.bin ignore_errors: true - name: copy file from controller to ios + scp (Default) @@ -65,6 +57,10 @@ register: result ignore_errors: true +- assert: + that: + - result.failed == true + - name: copy file with non-ascii characters to ios in default mode(binary) net_put: src: nonascii.bin