diff --git a/plugins/communicators/winrm/command_filters/rm.rb b/plugins/communicators/winrm/command_filters/rm.rb index 9133febf6..755a48896 100644 --- a/plugins/communicators/winrm/command_filters/rm.rb +++ b/plugins/communicators/winrm/command_filters/rm.rb @@ -31,9 +31,9 @@ module VagrantPlugins ret_cmd = '' if recurse - ret_cmd = "rm \"#{dir}\" -recurse -force" + ret_cmd = "if (Test-Path \"#{dir}\") {Remove-Item \"#{dir}\" -force -recurse}" else - ret_cmd = "rm \"#{dir}\" -force" + ret_cmd = "if (Test-Path \"#{dir}\") {Remove-Item \"#{dir}\" -force}" end return ret_cmd end diff --git a/plugins/provisioners/docker/cap/windows/docker_daemon_running.rb b/plugins/provisioners/docker/cap/windows/docker_daemon_running.rb new file mode 100644 index 000000000..2ff750cc3 --- /dev/null +++ b/plugins/provisioners/docker/cap/windows/docker_daemon_running.rb @@ -0,0 +1,13 @@ +module VagrantPlugins + module DockerProvisioner + module Cap + module Windows + module DockerDaemonRunning + def self.docker_daemon_running(machine) + machine.communicate.test("tasklist | find \"`\"dockerd`\"\"") + end + end + end + end + end +end diff --git a/plugins/provisioners/docker/client.rb b/plugins/provisioners/docker/client.rb index 84129a5d4..4293dffed 100644 --- a/plugins/provisioners/docker/client.rb +++ b/plugins/provisioners/docker/client.rb @@ -127,12 +127,9 @@ module VagrantPlugins def create_container(config) args = container_run_args(config) - @machine.communicate.sudo %[ - rm -f #{config[:cidfile]} - docker run #{args} - ] + @machine.communicate.sudo %[rm -f "#{config[:cidfile]}"] + @machine.communicate.sudo %[docker run #{args}] - name = container_name(config) sha = Digest::SHA1.hexdigest(args) container_data_path(config).open("w+") do |f| f.write(sha) diff --git a/plugins/provisioners/docker/plugin.rb b/plugins/provisioners/docker/plugin.rb index b39422cd0..6de03e727 100644 --- a/plugins/provisioners/docker/plugin.rb +++ b/plugins/provisioners/docker/plugin.rb @@ -54,6 +54,11 @@ module VagrantPlugins Cap::Linux::DockerDaemonRunning end + guest_capability("windows", "docker_daemon_running") do + require_relative "cap/windows/docker_daemon_running" + Cap::Windows::DockerDaemonRunning + end + provisioner(:docker) do require_relative "provisioner" Provisioner diff --git a/test/unit/plugins/communicators/winrm/command_filter_test.rb b/test/unit/plugins/communicators/winrm/command_filter_test.rb index 0bd6e7ba8..151227b35 100644 --- a/test/unit/plugins/communicators/winrm/command_filter_test.rb +++ b/test/unit/plugins/communicators/winrm/command_filter_test.rb @@ -54,22 +54,22 @@ describe VagrantPlugins::CommunicatorWinRM::CommandFilter, unit: true do it 'filters out rm recurse commands' do expect(subject.filter('rm -Rf /some/dir')).to eq( - "rm \"/some/dir\" -recurse -force") + "if (Test-Path \"/some/dir\") {Remove-Item \"/some/dir\" -force -recurse}") expect(subject.filter('rm -fr /some/dir')).to eq( - "rm \"/some/dir\" -recurse -force") + "if (Test-Path \"/some/dir\") {Remove-Item \"/some/dir\" -force -recurse}") expect(subject.filter('rm -r /some/dir')).to eq( - "rm \"/some/dir\" -recurse -force") + "if (Test-Path \"/some/dir\") {Remove-Item \"/some/dir\" -force -recurse}") expect(subject.filter('rm -r "/some/dir"')).to eq( - "rm \"/some/dir\" -recurse -force") + "if (Test-Path \"/some/dir\") {Remove-Item \"/some/dir\" -force -recurse}") end it 'filters out rm commands' do expect(subject.filter('rm /some/dir')).to eq( - "rm \"/some/dir\" -force") + "if (Test-Path \"/some/dir\") {Remove-Item \"/some/dir\" -force}") expect(subject.filter('rm -f /some/dir')).to eq( - "rm \"/some/dir\" -force") + "if (Test-Path \"/some/dir\") {Remove-Item \"/some/dir\" -force}") expect(subject.filter('rm -f "/some/dir"')).to eq( - "rm \"/some/dir\" -force") + "if (Test-Path \"/some/dir\") {Remove-Item \"/some/dir\" -force}") end it 'filters out mkdir commands' do