mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add connection tests for winrm connection plugin.
These are the same tests used for the other connection plugins, adapted to use winrm modules and Windows friendly paths.
This commit is contained in:
parent
e1461ef792
commit
262c341cda
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