Commit 8f762a7d by Chris Church Committed by Matt Martz

Update logging based on verbosity, add vvvvv support to show details of put/fetch file.

parent 9ca83446
...@@ -27,7 +27,7 @@ import traceback ...@@ -27,7 +27,7 @@ import traceback
import urlparse import urlparse
from ansible import errors from ansible import errors
from ansible import utils from ansible import utils
from ansible.callbacks import vvv, vvvv from ansible.callbacks import vvv, vvvv, verbose
from ansible.runner.shell_plugins import powershell from ansible.runner.shell_plugins import powershell
try: try:
...@@ -41,6 +41,9 @@ _winrm_cache = { ...@@ -41,6 +41,9 @@ _winrm_cache = {
# 'user:pwhash@host:port': <protocol instance> # 'user:pwhash@host:port': <protocol instance>
} }
def vvvvv(msg, host=None):
verbose(msg, host=None, caplevel=4)
class Connection(object): class Connection(object):
'''WinRM connections over HTTP/HTTPS.''' '''WinRM connections over HTTP/HTTPS.'''
...@@ -98,8 +101,11 @@ class Connection(object): ...@@ -98,8 +101,11 @@ class Connection(object):
if exc: if exc:
raise exc raise exc
def _winrm_exec(self, command, args): def _winrm_exec(self, command, args, from_exec=False):
vvvv("WINRM EXEC %r %r" % (command, args), host=self.host) if from_exec:
vvvv("WINRM EXEC %r %r" % (command, args), host=self.host)
else:
vvvvv("WINRM EXEC %r %r" % (command, args), host=self.host)
if not self.protocol: if not self.protocol:
self.protocol = self._winrm_connect() self.protocol = self._winrm_connect()
if not self.shell_id: if not self.shell_id:
...@@ -108,8 +114,12 @@ class Connection(object): ...@@ -108,8 +114,12 @@ class Connection(object):
try: try:
command_id = self.protocol.run_command(self.shell_id, command, args) command_id = self.protocol.run_command(self.shell_id, command, args)
response = Response(self.protocol.get_command_output(self.shell_id, command_id)) response = Response(self.protocol.get_command_output(self.shell_id, command_id))
vvvv('WINRM RESULT %r' % response, host=self.host) if from_exec:
vvvv('WINRM STDERR %s' % response.std_err, host=self.host) vvvv('WINRM RESULT %r' % response, host=self.host)
else:
vvvvv('WINRM RESULT %r' % response, host=self.host)
vvvvv('WINRM STDOUT %s' % response.std_out, host=self.host)
vvvvv('WINRM STDERR %s' % response.std_err, host=self.host)
return response return response
finally: finally:
if command_id: if command_id:
...@@ -122,15 +132,19 @@ class Connection(object): ...@@ -122,15 +132,19 @@ class Connection(object):
def exec_command(self, cmd, tmp_path, sudo_user=None, sudoable=False, executable=None, in_data=None, su=None, su_user=None): def exec_command(self, cmd, tmp_path, sudo_user=None, sudoable=False, executable=None, in_data=None, su=None, su_user=None):
cmd = cmd.encode('utf-8') cmd = cmd.encode('utf-8')
vvv("EXEC %s" % cmd, host=self.host)
cmd_parts = shlex.split(cmd, posix=False) cmd_parts = shlex.split(cmd, posix=False)
vvvv("WINRM PARTS %r" % cmd_parts, host=self.host) if '-EncodedCommand' in cmd_parts:
encoded_cmd = cmd_parts[cmd_parts.index('-EncodedCommand') + 1]
decoded_cmd = base64.b64decode(encoded_cmd)
vvv("EXEC %s" % decoded_cmd, host=self.host)
else:
vvv("EXEC %s" % cmd, host=self.host)
# For script/raw support. # For script/raw support.
if cmd_parts and cmd_parts[0].lower().endswith('.ps1'): if cmd_parts and cmd_parts[0].lower().endswith('.ps1'):
script = powershell._build_file_cmd(cmd_parts) script = powershell._build_file_cmd(cmd_parts)
cmd_parts = powershell._encode_script(script, as_list=True) cmd_parts = powershell._encode_script(script, as_list=True)
try: try:
result = self._winrm_exec(cmd_parts[0], cmd_parts[1:]) result = self._winrm_exec(cmd_parts[0], cmd_parts[1:], from_exec=True)
except Exception, e: except Exception, e:
traceback.print_exc() traceback.print_exc()
raise errors.AnsibleError("failed to exec cmd %s" % cmd) raise errors.AnsibleError("failed to exec cmd %s" % cmd)
...@@ -160,6 +174,7 @@ class Connection(object): ...@@ -160,6 +174,7 @@ class Connection(object):
$stream.SetLength(%d) | Out-Null; $stream.SetLength(%d) | Out-Null;
$stream.Close() | Out-Null; $stream.Close() | Out-Null;
''' % (buffer_size, powershell._escape(out_path), offset, b64_data, in_size) ''' % (buffer_size, powershell._escape(out_path), offset, b64_data, in_size)
vvvv("WINRM PUT %s to %s (offset=%d size=%d)" % (in_path, out_path, offset, len(out_data)), host=self.host)
cmd_parts = powershell._encode_script(script, as_list=True) cmd_parts = powershell._encode_script(script, as_list=True)
result = self._winrm_exec(cmd_parts[0], cmd_parts[1:]) result = self._winrm_exec(cmd_parts[0], cmd_parts[1:])
if result.status_code != 0: if result.status_code != 0:
...@@ -188,6 +203,7 @@ class Connection(object): ...@@ -188,6 +203,7 @@ class Connection(object):
[System.Convert]::ToBase64String($bytes); [System.Convert]::ToBase64String($bytes);
$stream.Close() | Out-Null; $stream.Close() | Out-Null;
''' % (buffer_size, powershell._escape(in_path), offset) ''' % (buffer_size, powershell._escape(in_path), offset)
vvvv("WINRM FETCH %s to %s (offset=%d)" % (in_path, out_path, offset), host=self.host)
cmd_parts = powershell._encode_script(script, as_list=True) cmd_parts = powershell._encode_script(script, as_list=True)
result = self._winrm_exec(cmd_parts[0], cmd_parts[1:]) result = self._winrm_exec(cmd_parts[0], cmd_parts[1:])
data = base64.b64decode(result.std_out.strip()) data = base64.b64decode(result.std_out.strip())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment