mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Merge pull request #15144 from mattclay/winrm-test
Add winrm tests and fix exposed unicode errors.
This commit is contained in:
commit
3f70d7a70d
4 changed files with 61 additions and 5 deletions
|
@ -247,9 +247,9 @@ class Connection(ConnectionBase):
|
||||||
|
|
||||||
# FUTURE: determine buffer size at runtime via remote winrm config?
|
# FUTURE: determine buffer size at runtime via remote winrm config?
|
||||||
def _put_file_stdin_iterator(self, in_path, out_path, buffer_size=250000):
|
def _put_file_stdin_iterator(self, in_path, out_path, buffer_size=250000):
|
||||||
in_size = os.path.getsize(in_path)
|
in_size = os.path.getsize(to_bytes(in_path, errors='strict'))
|
||||||
offset = 0
|
offset = 0
|
||||||
with open(in_path, 'rb') as in_file:
|
with open(to_bytes(in_path, errors='strict'), 'rb') as in_file:
|
||||||
for out_data in iter((lambda:in_file.read(buffer_size)), ''):
|
for out_data in iter((lambda:in_file.read(buffer_size)), ''):
|
||||||
offset += len(out_data)
|
offset += len(out_data)
|
||||||
self._display.vvvvv('WINRM PUT "%s" to "%s" (offset=%d size=%d)' % (in_path, out_path, offset, len(out_data)), host=self._winrm_host)
|
self._display.vvvvv('WINRM PUT "%s" to "%s" (offset=%d size=%d)' % (in_path, out_path, offset, len(out_data)), host=self._winrm_host)
|
||||||
|
@ -265,7 +265,7 @@ class Connection(ConnectionBase):
|
||||||
super(Connection, self).put_file(in_path, out_path)
|
super(Connection, self).put_file(in_path, out_path)
|
||||||
out_path = self._shell._unquote(out_path)
|
out_path = self._shell._unquote(out_path)
|
||||||
display.vvv('PUT "%s" TO "%s"' % (in_path, out_path), host=self._winrm_host)
|
display.vvv('PUT "%s" TO "%s"' % (in_path, out_path), host=self._winrm_host)
|
||||||
if not os.path.exists(in_path):
|
if not os.path.exists(to_bytes(in_path, errors='strict')):
|
||||||
raise AnsibleFileNotFound('file or module does not exist: "%s"' % in_path)
|
raise AnsibleFileNotFound('file or module does not exist: "%s"' % in_path)
|
||||||
|
|
||||||
script_template = u'''
|
script_template = u'''
|
||||||
|
@ -366,9 +366,9 @@ class Connection(ConnectionBase):
|
||||||
else:
|
else:
|
||||||
if not out_file:
|
if not out_file:
|
||||||
# If out_path is a directory and we're expecting a file, bail out now.
|
# If out_path is a directory and we're expecting a file, bail out now.
|
||||||
if os.path.isdir(out_path):
|
if os.path.isdir(to_bytes(out_path, errors='strict')):
|
||||||
break
|
break
|
||||||
out_file = open(out_path, 'wb')
|
out_file = open(to_bytes(out_path, errors='strict'), 'wb')
|
||||||
out_file.write(data)
|
out_file.write(data)
|
||||||
if len(data) < buffer_size:
|
if len(data) < buffer_size:
|
||||||
break
|
break
|
||||||
|
|
|
@ -102,6 +102,13 @@ test_connection: setup
|
||||||
$(call TEST_CONNECTION_CMD)
|
$(call TEST_CONNECTION_CMD)
|
||||||
$(call TEST_CONNECTION_CMD, LC_ALL=C LANG=C)
|
$(call TEST_CONNECTION_CMD, LC_ALL=C LANG=C)
|
||||||
|
|
||||||
|
# Connection plugin test command to repeat with each locale setting. WinRM specific version.
|
||||||
|
TEST_CONNECTION_WINRM_CMD = $(1) ansible-playbook test_connection_winrm.yml -i inventory.winrm $(TEST_FLAGS)
|
||||||
|
|
||||||
|
test_connection_winrm: setup
|
||||||
|
$(call TEST_CONNECTION_WINRM_CMD)
|
||||||
|
$(call TEST_CONNECTION_WINRM_CMD, LC_ALL=C LANG=C)
|
||||||
|
|
||||||
destructive: setup
|
destructive: setup
|
||||||
ansible-playbook destructive.yml -i $(INVENTORY) -e outputdir=$(TEST_DIR) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -v $(TEST_FLAGS)
|
ansible-playbook destructive.yml -i $(INVENTORY) -e outputdir=$(TEST_DIR) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -v $(TEST_FLAGS)
|
||||||
|
|
||||||
|
|
|
@ -5,3 +5,15 @@ server ansible_ssh_host=10.10.10.10 ansible_ssh_user=Administrator ansible_ssh_p
|
||||||
ansible_connection=winrm
|
ansible_connection=winrm
|
||||||
# HTTPS uses 5986, HTTP uses 5985
|
# HTTPS uses 5986, HTTP uses 5985
|
||||||
ansible_ssh_port=5985
|
ansible_ssh_port=5985
|
||||||
|
|
||||||
|
[winrm]
|
||||||
|
winrm-pipelining ansible_ssh_pipelining=true
|
||||||
|
winrm-no-pipelining ansible_ssh_pipelining=false
|
||||||
|
|
||||||
|
[winrm:vars]
|
||||||
|
ansible_connection=winrm
|
||||||
|
ansible_host=somehost
|
||||||
|
ansible_user=someuser
|
||||||
|
ansible_password=somepassword
|
||||||
|
ansible_port=5986
|
||||||
|
ansible_winrm_server_cert_validation=ignore
|
||||||
|
|
37
test/integration/test_connection_winrm.yml
Normal file
37
test/integration/test_connection_winrm.yml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
- hosts: winrm
|
||||||
|
gather_facts: no
|
||||||
|
serial: 1
|
||||||
|
tasks:
|
||||||
|
|
||||||
|
### raw with unicode arg and output
|
||||||
|
|
||||||
|
- name: raw with unicode arg and output
|
||||||
|
raw: echo 汉语
|
||||||
|
register: command
|
||||||
|
- name: check output of raw with unicode arg and output
|
||||||
|
assert: { that: "'汉语' in command.stdout" }
|
||||||
|
|
||||||
|
### copy local file with unicode filename and content
|
||||||
|
|
||||||
|
- name: create local file with unicode filename and content
|
||||||
|
local_action: lineinfile dest=/tmp/ansible-local-汉语/汉语.txt create=true line=汉语
|
||||||
|
- name: remove remote file with unicode filename and content
|
||||||
|
win_file: path=c:/windows/temp/ansible-remote-汉语/汉语.txt state=absent
|
||||||
|
- name: create remote directory with unicode name
|
||||||
|
win_file: path=c:/windows/temp/ansible-remote-汉语 state=directory
|
||||||
|
- name: copy local file with unicode filename and content
|
||||||
|
win_copy: src=/tmp/ansible-local-汉语/汉语.txt dest=c:/windows/temp/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-汉语/汉语.txt state=absent
|
||||||
|
- name: fetch remote file with unicode filename and content
|
||||||
|
fetch: src=c:/windows/temp/ansible-remote-汉语/汉语.txt dest=/tmp/ansible-local-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
|
||||||
|
|
||||||
|
### remove local and remote temp files
|
||||||
|
|
||||||
|
- name: remove local temp file
|
||||||
|
local_action: file path=/tmp/ansible-local-汉语 state=absent
|
||||||
|
- name: remove remote temp file
|
||||||
|
win_file: path=c:/windows/temp/ansible-remote-汉语 state=absent
|
Loading…
Reference in a new issue