Integrated WinRM command filter into communicator
*nix commands are now filtered out instead of being sent to the guest. This means the command_alias PowerShell script is no longer needed. Moved the PowerShell exit code helper to the WinRM shell and changed it to always return an exit code.
This commit is contained in:
parent
1525aa0f78
commit
f44c795eed
|
@ -4,6 +4,7 @@ require "log4r"
|
|||
|
||||
require_relative "helper"
|
||||
require_relative "shell"
|
||||
require_relative "command_filter"
|
||||
|
||||
module VagrantPlugins
|
||||
module CommunicatorWinRM
|
||||
|
@ -16,9 +17,10 @@ module VagrantPlugins
|
|||
end
|
||||
|
||||
def initialize(machine)
|
||||
@machine = machine
|
||||
@logger = Log4r::Logger.new("vagrant::communication::winrm")
|
||||
@shell = nil
|
||||
@machine = machine
|
||||
@shell = nil
|
||||
@logger = Log4r::Logger.new("vagrant::communication::winrm")
|
||||
@cmd_filter = CommandFilter.new()
|
||||
|
||||
@logger.info("Initializing WinRMCommunicator")
|
||||
end
|
||||
|
@ -50,6 +52,10 @@ module VagrantPlugins
|
|||
end
|
||||
|
||||
def execute(command, opts={}, &block)
|
||||
# If this is a *nix command with no Windows equivilant, don't run it
|
||||
command = @cmd_filter.filter(command)
|
||||
return 0 if command.empty?
|
||||
|
||||
opts = {
|
||||
:error_check => true,
|
||||
:error_class => Errors::ExecutionError,
|
||||
|
@ -58,12 +64,6 @@ module VagrantPlugins
|
|||
:shell => :powershell
|
||||
}.merge(opts || {})
|
||||
|
||||
if opts[:shell] == :powershell
|
||||
script = File.expand_path("../scripts/command_alias.ps1", __FILE__)
|
||||
script = File.read(script)
|
||||
command = script << "\r\n" << command << "\r\nexit $LASTEXITCODE"
|
||||
end
|
||||
|
||||
output = shell.send(opts[:shell], command, &block)
|
||||
|
||||
return output if opts[:shell] == :wql
|
||||
|
@ -74,10 +74,9 @@ module VagrantPlugins
|
|||
alias_method :sudo, :execute
|
||||
|
||||
def test(command, opts=nil)
|
||||
@logger.info("Testing: #{command}")
|
||||
|
||||
# HACK: to speed up Vagrant 1.2 OS detection, skip checking for *nix OS
|
||||
return false unless (command =~ /^uname|^cat \/etc|^cat \/proc|grep 'Fedora/).nil?
|
||||
# If this is a *nix command with no Windows equivilant, assume failure
|
||||
command = @cmd_filter.filter(command)
|
||||
return false if command.empty?
|
||||
|
||||
opts = { :error_check => false }.merge(opts || {})
|
||||
execute(command, opts) == 0
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
function which {
|
||||
$command = [Array](Get-Command $args[0] -errorAction SilentlyContinue)
|
||||
if($null -eq $command)
|
||||
{
|
||||
exit 1
|
||||
}
|
||||
write-host $command[0].Definition
|
||||
exit 0
|
||||
}
|
||||
|
||||
function test ([Switch] $d, [String] $path) {
|
||||
if(Test-Path $path)
|
||||
{
|
||||
exit 0
|
||||
}
|
||||
exit 1
|
||||
}
|
||||
|
||||
function chmod {
|
||||
exit 0
|
||||
}
|
||||
|
||||
function chown {
|
||||
exit 0
|
||||
}
|
||||
|
||||
function mkdir ([Switch] $p, [String] $path)
|
||||
{
|
||||
if(Test-Path $path)
|
||||
{
|
||||
exit 0
|
||||
} else {
|
||||
New-Item $path -Type Directory -Force | Out-Null
|
||||
}
|
||||
}
|
|
@ -52,6 +52,9 @@ module VagrantPlugins
|
|||
end
|
||||
|
||||
def powershell(command, &block)
|
||||
# ensure an exit code
|
||||
command << "\r\n"
|
||||
command << "if ($LASTEXITCODE) { exit $LASTEXITCODE } else { exit 0 }"
|
||||
execute_shell(command, :powershell, &block)
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue