Fix PowerShell plugin issues affecting fetch module when used against Windows hosts.
This commit is contained in:
parent
6570a6c6de
commit
de267b5655
4 changed files with 21 additions and 8 deletions
|
@ -1193,7 +1193,7 @@ class Runner(object):
|
||||||
return path
|
return path
|
||||||
|
|
||||||
if len(split_path) > 1:
|
if len(split_path) > 1:
|
||||||
return os.path.join(initial_fragment, *split_path[1:])
|
return conn.shell.join_path(initial_fragment, *split_path[1:])
|
||||||
else:
|
else:
|
||||||
return initial_fragment
|
return initial_fragment
|
||||||
|
|
||||||
|
|
|
@ -193,7 +193,7 @@ class Connection(object):
|
||||||
def fetch_file(self, in_path, out_path):
|
def fetch_file(self, in_path, out_path):
|
||||||
out_path = out_path.replace('\\', '/')
|
out_path = out_path.replace('\\', '/')
|
||||||
vvv("FETCH %s TO %s" % (in_path, out_path), host=self.host)
|
vvv("FETCH %s TO %s" % (in_path, out_path), host=self.host)
|
||||||
buffer_size = 2**20 # 1MB chunks
|
buffer_size = 2**19 # 0.5MB chunks
|
||||||
if not os.path.exists(os.path.dirname(out_path)):
|
if not os.path.exists(os.path.dirname(out_path)):
|
||||||
os.makedirs(os.path.dirname(out_path))
|
os.makedirs(os.path.dirname(out_path))
|
||||||
out_file = None
|
out_file = None
|
||||||
|
|
|
@ -84,12 +84,24 @@ class ShellModule(object):
|
||||||
# FIXME: Support system temp path!
|
# FIXME: Support system temp path!
|
||||||
return _encode_script('''(New-Item -Type Directory -Path $env:temp -Name "%s").FullName | Write-Host -Separator '';''' % basefile)
|
return _encode_script('''(New-Item -Type Directory -Path $env:temp -Name "%s").FullName | Write-Host -Separator '';''' % basefile)
|
||||||
|
|
||||||
def md5(self, path):
|
def expand_user(self, user_home_path):
|
||||||
|
# PowerShell only supports "~" (not "~username"). Resolve-Path ~ does
|
||||||
|
# not seem to work remotely, though by default we are always starting
|
||||||
|
# in the user's home directory.
|
||||||
|
if user_home_path == '~':
|
||||||
|
script = 'Write-Host (Get-Location).Path'
|
||||||
|
elif user_home_path.startswith('~\\'):
|
||||||
|
script = 'Write-Host ((Get-Location).Path + "%s")' % _escape(user_home_path[1:])
|
||||||
|
else:
|
||||||
|
script = 'Write-Host "%s"' % _escape(user_home_path)
|
||||||
|
return _encode_script(script)
|
||||||
|
|
||||||
|
def checksum(self, path, python_interp):
|
||||||
path = _escape(path)
|
path = _escape(path)
|
||||||
script = '''
|
script = '''
|
||||||
If (Test-Path -PathType Leaf "%(path)s")
|
If (Test-Path -PathType Leaf "%(path)s")
|
||||||
{
|
{
|
||||||
$sp = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider;
|
$sp = new-object -TypeName System.Security.Cryptography.SHA1CryptoServiceProvider;
|
||||||
$fp = [System.IO.File]::Open("%(path)s", [System.IO.Filemode]::Open, [System.IO.FileAccess]::Read);
|
$fp = [System.IO.File]::Open("%(path)s", [System.IO.Filemode]::Open, [System.IO.FileAccess]::Read);
|
||||||
[System.BitConverter]::ToString($sp.ComputeHash($fp)).Replace("-", "").ToLower();
|
[System.BitConverter]::ToString($sp.ComputeHash($fp)).Replace("-", "").ToLower();
|
||||||
$fp.Dispose();
|
$fp.Dispose();
|
||||||
|
|
|
@ -18,11 +18,11 @@
|
||||||
|
|
||||||
- name: clean out the test directory
|
- name: clean out the test directory
|
||||||
local_action: file name={{ output_dir|mandatory }} state=absent
|
local_action: file name={{ output_dir|mandatory }} state=absent
|
||||||
tags: me
|
run_once: true
|
||||||
|
|
||||||
- name: create the test directory
|
- name: create the test directory
|
||||||
local_action: file name={{ output_dir }} state=directory
|
local_action: file name={{ output_dir }} state=directory
|
||||||
tags: me
|
run_once: true
|
||||||
|
|
||||||
- name: fetch a small file
|
- name: fetch a small file
|
||||||
fetch: src="C:/Windows/win.ini" dest={{ output_dir }}
|
fetch: src="C:/Windows/win.ini" dest={{ output_dir }}
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
- "not fetch_missing_nofail|changed"
|
- "not fetch_missing_nofail|changed"
|
||||||
|
|
||||||
- name: attempt to fetch a non-existent file - fail on missing
|
- name: attempt to fetch a non-existent file - fail on missing
|
||||||
fetch: src="C:/this_file_should_not_exist.txt" dest={{ output_dir }} fail_on_missing=yes
|
fetch: src="~/this_file_should_not_exist.txt" dest={{ output_dir }} fail_on_missing=yes
|
||||||
register: fetch_missing
|
register: fetch_missing
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
|
@ -164,5 +164,6 @@
|
||||||
- name: check fetch directory result
|
- name: check fetch directory result
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "fetch_dir|failed"
|
# Doesn't fail anymore, only returns a message.
|
||||||
|
- "not fetch_dir|changed"
|
||||||
- "fetch_dir.msg"
|
- "fetch_dir.msg"
|
||||||
|
|
Loading…
Reference in a new issue