vagrant-windows 1.5.1 → 1.6.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- - 1.9.2
5
4
  - 2.0.0
5
+ - 2.1.0
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Code Climate](https://codeclimate.com/github/WinRb/vagrant-windows.png)](https://codeclimate.com/github/WinRb/vagrant-windows)
4
4
  [![Gem Version](https://badge.fury.io/rb/vagrant-windows.png)](http://badge.fury.io/rb/vagrant-windows)
5
5
 
6
- Use Windows guests with Vagrant
6
+ This [Vagrant](http://www.vagrantup.com/) plugin allows you to standup Windows guests using [WinRM](http://msdn.microsoft.com/en-us/library/aa384426\(v=vs.85\).aspx) instead of SSH. Additionally this plugin makes it easier to provision with Chef, Puppet, and the shell (PowerShell) on Windows guests.
7
7
 
8
8
  ## Getting Started
9
9
  1. Install the vagrant-windows plugin.
@@ -1 +1,74 @@
1
- # TODO: support Chef client
1
+ require "#{Vagrant::source_root}/plugins/provisioners/chef/provisioner/chef_client"
2
+ require_relative '../../../../../helper'
3
+ require_relative '../../../../../windows_machine'
4
+ require_relative '../../../../../provisioners/chef_command_builder'
5
+
6
+ module VagrantPlugins
7
+ module Chef
8
+ module Provisioner
9
+ class ChefClient < Base
10
+
11
+ include VagrantWindows::Helper
12
+
13
+ def initialize(machine, config)
14
+ super
15
+ @windows_machine = VagrantWindows::WindowsMachine.new(machine)
16
+ @logger = Log4r::Logger.new("vagrant::provisioners::chef_client")
17
+ end
18
+
19
+ provision_on_linux = instance_method(:provision)
20
+ run_chef_client_on_linux = instance_method(:run_chef_client)
21
+
22
+ define_method(:run_chef_client) do
23
+ @windows_machine.is_windows? ? run_chef_client_on_windows() : run_chef_client_on_linux.bind(self).()
24
+ end
25
+
26
+ define_method(:provision) do
27
+ wait_if_rebooting(@windows_machine) if @windows_machine.is_windows?
28
+ provision_on_linux.bind(self).()
29
+ end
30
+
31
+ def run_chef_client_on_windows
32
+ if @config.run_list && @config.run_list.empty?
33
+ @machine.ui.warn(I18n.t("vagrant.chef_run_list_empty"))
34
+ end
35
+
36
+ #################### START - monkey patched code ####################
37
+ command_builder = ::VagrantWindows::Provisioners::ChefCommandBuilder.new(
38
+ @windows_machine, @config, :client)
39
+
40
+ command_builder.prepare_for_chef_run()
41
+ command = command_builder.run_chef_command()
42
+ ###################### END - monkey patched code ####################
43
+
44
+ @config.attempts.times do |attempt|
45
+ if attempt == 0
46
+ @machine.env.ui.info I18n.t("vagrant.provisioners.chef.running_client")
47
+ else
48
+ @machine.env.ui.info I18n.t("vagrant.provisioners.chef.running_client_again")
49
+ end
50
+
51
+ #################### START - monkey patched code ####################
52
+ @windows_machine.reinitialize_network_shares()
53
+ ###################### END - monkey patched code ####################
54
+
55
+ exit_status = @machine.communicate.execute(command, :error_check => false) do |type, data|
56
+ # Output the data with the proper color based on the stream.
57
+ color = type == :stdout ? :green : :red
58
+
59
+ @machine.env.ui.info(
60
+ data, :color => color, :new_line => false, :prefix => false)
61
+ end
62
+
63
+ # There is no need to run Chef again if it converges
64
+ return if exit_status == 0
65
+ end
66
+
67
+ # If we reached this point then Chef never converged! Error.
68
+ raise ChefError, :no_convergence
69
+ end
70
+
71
+ end # ChefSolo class
72
+ end
73
+ end
74
+ end
@@ -1,46 +1,43 @@
1
- require 'tempfile'
2
1
  require "#{Vagrant::source_root}/plugins/provisioners/chef/provisioner/chef_solo"
3
2
  require_relative '../../../../../helper'
4
3
  require_relative '../../../../../windows_machine'
4
+ require_relative '../../../../../provisioners/chef_command_builder'
5
5
 
6
6
  module VagrantPlugins
7
7
  module Chef
8
8
  module Provisioner
9
9
  class ChefSolo < Base
10
-
10
+
11
11
  include VagrantWindows::Helper
12
+
13
+ def initialize(machine, config)
14
+ super
15
+ @windows_machine = VagrantWindows::WindowsMachine.new(machine)
16
+ @logger = Log4r::Logger.new("vagrant::provisioners::chef_solo")
17
+ end
12
18
 
13
19
  provision_on_linux = instance_method(:provision)
14
20
  run_chef_solo_on_linux = instance_method(:run_chef_solo)
15
21
 
16
22
  # This patch is needed until Vagrant supports chef on Windows guests
17
23
  define_method(:run_chef_solo) do
18
- is_windows? ? run_chef_solo_on_windows() : run_chef_solo_on_linux.bind(self).()
24
+ @windows_machine.is_windows? ? run_chef_solo_on_windows() : run_chef_solo_on_linux.bind(self).()
19
25
  end
20
26
 
21
27
  define_method(:provision) do
22
- windows_machine = VagrantWindows::WindowsMachine.new(@machine)
23
- wait_if_rebooting(windows_machine) if is_windows?
28
+ wait_if_rebooting(@windows_machine) if @windows_machine.is_windows?
24
29
  provision_on_linux.bind(self).()
25
30
  end
26
31
 
27
32
  def run_chef_solo_on_windows
28
- # create cheftaskrun.ps1 that the scheduled task will invoke when run
29
- render_file_and_upload("cheftaskrun.ps1", chef_script_options[:chef_task_run_ps1], :options => chef_script_options)
30
-
31
- # create cheftask.xml that the scheduled task will be created with
32
- render_file_and_upload("cheftask.xml", chef_script_options[:chef_task_xml], :options => chef_script_options)
33
-
34
- # create cheftask.ps1 that will immediately invoke the scheduled task and wait for completion
35
- render_file_and_upload("cheftask.ps1", chef_script_options[:chef_task_ps1], :options => chef_script_options)
36
33
 
37
- command = <<-EOH
38
- $old = Get-ExecutionPolicy;
39
- Set-ExecutionPolicy Unrestricted -force;
40
- #{chef_script_options[:chef_task_ps1]};
41
- Set-ExecutionPolicy $old -force
42
- exit $LASTEXITCODE
43
- EOH
34
+ #################### START - monkey patched code ####################
35
+ command_builder = ::VagrantWindows::Provisioners::ChefCommandBuilder.new(
36
+ @windows_machine, @config, :solo)
37
+
38
+ command_builder.prepare_for_chef_run()
39
+ command = command_builder.run_chef_command()
40
+ ###################### END - monkey patched code ####################
44
41
 
45
42
  @config.attempts.times do |attempt|
46
43
  if attempt == 0
@@ -49,9 +46,9 @@ module VagrantPlugins
49
46
  @machine.env.ui.info I18n.t("vagrant.provisioners.chef.running_solo_again")
50
47
  end
51
48
 
52
- # This re-establishes our symbolic links if they were created between now and a reboot
53
- # Fixes issue #119
54
- @machine.communicate.execute('& net use a-non-existant-share', :error_check => false)
49
+ #################### START - monkey patched code ####################
50
+ @windows_machine.reinitialize_network_shares()
51
+ ###################### END - monkey patched code ####################
55
52
 
56
53
  exit_status = @machine.communicate.execute(command, :error_check => false) do |type, data|
57
54
  # Output the data with the proper color based on the stream.
@@ -69,49 +66,6 @@ module VagrantPlugins
69
66
  raise ChefError, :no_convergence
70
67
  end
71
68
 
72
- def render_file_and_upload(script_name, dest_file, options)
73
- script_contents = VagrantWindows.load_script_template(script_name, options)
74
-
75
- # render cheftaskrun.ps1 to local temp file
76
- script_local = Tempfile.new(script_name)
77
- IO.write(script_local, script_contents)
78
-
79
- # upload cheftaskrun.ps1 file
80
- @machine.communicate.upload(script_local, dest_file)
81
- end
82
-
83
- def chef_script_options
84
- if @chef_script_options.nil?
85
- command_env = @config.binary_env ? "#{@config.binary_env} " : ""
86
- command_args = @config.arguments ? " #{@config.arguments}" : ""
87
- chef_solo_path = win_friendly_path(File.join(@config.provisioning_path, 'solo.rb'))
88
- chef_dna_path = win_friendly_path(File.join(@config.provisioning_path, 'dna.json'))
89
-
90
- chef_arguments = "-c #{chef_solo_path} "
91
- chef_arguments << "-j #{chef_dna_path} "
92
- chef_arguments << "#{command_args}"
93
-
94
- @chef_script_options = {
95
- :user => @machine.config.winrm.username,
96
- :pass => @machine.config.winrm.password,
97
- :chef_arguments => chef_arguments,
98
- :chef_task_xml => win_friendly_path("#{@config.provisioning_path}/cheftask.xml"),
99
- :chef_task_running => win_friendly_path("#{@config.provisioning_path}/cheftask.running"),
100
- :chef_task_exitcode => win_friendly_path("#{@config.provisioning_path}/cheftask.exitcode"),
101
- :chef_task_ps1 => win_friendly_path("#{@config.provisioning_path}/cheftask.ps1"),
102
- :chef_task_run_ps1 => win_friendly_path("#{@config.provisioning_path}/cheftaskrun.ps1"),
103
- :chef_stdout_log => win_friendly_path("#{@config.provisioning_path}/chef-solo.log"),
104
- :chef_stderr_log => win_friendly_path("#{@config.provisioning_path}/chef-solo.err.log"),
105
- :chef_binary_path => win_friendly_path("#{command_env}#{chef_binary_path("chef-solo")}")
106
- }
107
- end
108
- @chef_script_options
109
- end
110
-
111
- def is_windows?
112
- VagrantWindows::WindowsMachine.is_windows?(@machine)
113
- end
114
-
115
69
  end # ChefSolo class
116
70
  end
117
71
  end
@@ -0,0 +1,105 @@
1
+ require 'tempfile'
2
+ require_relative '../helper'
3
+ require_relative '../windows_machine'
4
+
5
+ module VagrantWindows
6
+ module Provisioners
7
+
8
+ # Builds scripts and ultimately the command to execute Chef solo or Chef client
9
+ # on Windows guests using a scheduled task.
10
+ class ChefCommandBuilder
11
+
12
+ include VagrantWindows::Helper
13
+
14
+ def initialize(windows_machine, chef_config, client_type)
15
+ @windows_machine = windows_machine
16
+ @config = chef_config
17
+
18
+ if client_type != :solo && client_type != :client
19
+ raise 'Invalid client_type, expected solo or client'
20
+ end
21
+
22
+ @client_type = client_type
23
+ end
24
+
25
+ def prepare_for_chef_run()
26
+ options = create_chef_options()
27
+
28
+ # create cheftaskrun.ps1 that the scheduled task will invoke when run
29
+ render_file_and_upload('cheftaskrun.ps1', options[:chef_task_run_ps1],
30
+ :options => options)
31
+
32
+ # create cheftask.xml that the scheduled task will be created with
33
+ render_file_and_upload('cheftask.xml', options[:chef_task_xml],
34
+ :options => options)
35
+
36
+ # create cheftask.ps1 that will immediately invoke the scheduled task and wait for completion
37
+ render_file_and_upload('cheftask.ps1', options[:chef_task_ps1],
38
+ :options => options)
39
+ end
40
+
41
+ def run_chef_command()
42
+ return <<-EOH
43
+ $old = Get-ExecutionPolicy;
44
+ Set-ExecutionPolicy Unrestricted -force;
45
+ #{chef_task_ps1_path};
46
+ Set-ExecutionPolicy $old -force
47
+ EOH
48
+ end
49
+
50
+
51
+
52
+ def render_file_and_upload(script_name, dest_file, options)
53
+ # render the script file to a local temp file and then upload
54
+ script_local = Tempfile.new(script_name)
55
+ IO.write(script_local, VagrantWindows.load_script_template(script_name, options))
56
+ @windows_machine.winrmshell.upload(script_local, dest_file)
57
+ end
58
+
59
+ def create_chef_options
60
+ command_env = @config.binary_env ? "#{@config.binary_env} " : ''
61
+ return {
62
+ :user => @windows_machine.winrm_config.username,
63
+ :pass => @windows_machine.winrm_config.password,
64
+ :chef_arguments => create_chef_arguments(),
65
+ :chef_task_xml => provisioning_path('cheftask.xml'),
66
+ :chef_task_running => provisioning_path('cheftask.running'),
67
+ :chef_task_exitcode => provisioning_path('cheftask.exitcode'),
68
+ :chef_task_ps1 => chef_task_ps1_path(),
69
+ :chef_task_run_ps1 => provisioning_path('cheftaskrun.ps1'),
70
+ :chef_stdout_log => provisioning_path("chef-#{@client_type}.log"),
71
+ :chef_stderr_log => provisioning_path("chef-#{@client_type}.err.log"),
72
+ :chef_binary_path => win_friendly_path("#{command_env}#{chef_binary_path}")
73
+ }
74
+ end
75
+
76
+ def create_chef_arguments()
77
+ command_args = @config.arguments ? @config.arguments : ''
78
+ chef_path = provisioning_path("#{@client_type}.rb")
79
+ chef_dna_path = provisioning_path('dna.json')
80
+
81
+ chef_arguments = "-c #{chef_path}"
82
+ chef_arguments << " -j #{chef_dna_path}"
83
+ chef_arguments << " #{command_args}"
84
+ chef_arguments.strip
85
+ end
86
+
87
+ def chef_task_ps1_path()
88
+ provisioning_path('cheftask.ps1')
89
+ end
90
+
91
+ # Returns the path to the Chef binary, taking into account the
92
+ # `binary_path` configuration option.
93
+ def chef_binary_path()
94
+ binary = "chef-#{@client_type}"
95
+ return binary if !@config.binary_path
96
+ return win_friendly_path(File.join(@config.binary_path, binary))
97
+ end
98
+
99
+ def provisioning_path(file_name)
100
+ win_friendly_path("#{@config.provisioning_path}/#{file_name}")
101
+ end
102
+
103
+ end
104
+ end
105
+ end
@@ -1,3 +1,3 @@
1
1
  module VagrantWindows
2
- VERSION = "1.5.1"
2
+ VERSION = "1.6.0.pre.1"
3
3
  end
@@ -18,6 +18,13 @@ module VagrantWindows
18
18
  @machine = machine
19
19
  @logger = Log4r::Logger.new("vagrant_windows::windows_machine")
20
20
  end
21
+
22
+ # Returns true if this Vagrant machine is a Windows guest, otherwise false.
23
+ #
24
+ # @return [Boolean]
25
+ def is_windows?()
26
+ WindowsMachine.is_windows?(@machine)
27
+ end
21
28
 
22
29
  # Checks to see if the machine is using VMWare Fusion or Workstation.
23
30
  #
@@ -55,6 +62,12 @@ module VagrantWindows
55
62
  @machine.communicate.winrmshell
56
63
  end
57
64
 
65
+ # Re-establishes our symbolic links if they were created between now and a reboot
66
+ # Fixes issue #119
67
+ def reinitialize_network_shares()
68
+ winrmshell.powershell('& net use a-non-existant-share')
69
+ end
70
+
58
71
  # Reads the machine's MAC addresses keyed by interface index.
59
72
  # {1=>"0800273FAC5A", 2=>"08002757E68A"}
60
73
  #
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+
3
+ describe VagrantWindows::Provisioners::ChefCommandBuilder, :unit => true do
4
+
5
+ before(:each) do
6
+ @winrm_config = stub()
7
+ @winrm_config.stubs(:username).returns('vagrant')
8
+ @winrm_config.stubs(:password).returns('secret')
9
+
10
+ @windows_machine = stub()
11
+ @windows_machine.stubs(:winrm_config).returns(@winrm_config)
12
+
13
+ @chef_config = stub()
14
+ @chef_config.stubs(:provisioning_path).returns('/tmp/vagrant-chef-1')
15
+ @chef_config.stubs(:arguments).returns(nil)
16
+ @chef_config.stubs(:binary_env).returns(nil)
17
+ @chef_config.stubs(:binary_path).returns(nil)
18
+
19
+ @chef_cmd_builder = VagrantWindows::Provisioners::ChefCommandBuilder.new(
20
+ @windows_machine, @chef_config, :client)
21
+ end
22
+
23
+ describe 'initialize' do
24
+ it 'should raise when chef type is not client or solo' do
25
+ expect { VagrantWindows::Provisioners::ChefCommandBuilder.new(@windows_machine, @chef_config, :zero) }.to raise_error
26
+ end
27
+ end
28
+
29
+ describe 'provisioning_path' do
30
+ it 'should be windows friendly' do
31
+ @chef_cmd_builder.provisioning_path('script.ps1').should eql 'c:\tmp\vagrant-chef-1\script.ps1'
32
+ end
33
+ end
34
+
35
+ describe 'create_chef_arguments' do
36
+ it 'should include paths to client.rb and dna.json' do
37
+ expected = '-c c:\tmp\vagrant-chef-1\client.rb -j c:\tmp\vagrant-chef-1\dna.json'
38
+ @chef_cmd_builder.create_chef_arguments().should eql expected
39
+ end
40
+
41
+ it 'should include Chef arguments if specified' do
42
+ @chef_config.stubs(:arguments).returns('-l DEBUG')
43
+ expected = '-c c:\tmp\vagrant-chef-1\client.rb -j c:\tmp\vagrant-chef-1\dna.json -l DEBUG'
44
+ @chef_cmd_builder.create_chef_arguments().should eql expected
45
+ end
46
+ end
47
+
48
+ describe 'create_chef_options' do
49
+ it "should include winrm username and password" do
50
+ options = @chef_cmd_builder.create_chef_options()
51
+ options[:user].should eql 'vagrant'
52
+ options[:pass].should eql 'secret'
53
+ end
54
+
55
+ it 'should include paths to scripts' do
56
+ options = @chef_cmd_builder.create_chef_options()
57
+ options[:chef_task_xml].should eql 'c:\tmp\vagrant-chef-1\cheftask.xml'
58
+ options[:chef_task_ps1].should eql 'c:\tmp\vagrant-chef-1\cheftask.ps1'
59
+ options[:chef_task_run_ps1].should eql 'c:\tmp\vagrant-chef-1\cheftaskrun.ps1'
60
+ end
61
+
62
+ it 'should include paths to process flow files' do
63
+ options = @chef_cmd_builder.create_chef_options()
64
+ options[:chef_task_running].should eql 'c:\tmp\vagrant-chef-1\cheftask.running'
65
+ options[:chef_task_exitcode].should eql 'c:\tmp\vagrant-chef-1\cheftask.exitcode'
66
+ end
67
+
68
+ it 'should include paths to logs' do
69
+ options = @chef_cmd_builder.create_chef_options()
70
+ options[:chef_stdout_log].should eql 'c:\tmp\vagrant-chef-1\chef-client.log'
71
+ options[:chef_stderr_log].should eql 'c:\tmp\vagrant-chef-1\chef-client.err.log'
72
+ end
73
+
74
+ it 'should include path to chef binary' do
75
+ options = @chef_cmd_builder.create_chef_options()
76
+ options[:chef_binary_path].should eql 'chef-client'
77
+ end
78
+
79
+ it 'should include full path to chef binary when binary_path is set' do
80
+ @chef_config.stubs(:binary_path).returns('c:/opscode/chef/bin')
81
+ options = @chef_cmd_builder.create_chef_options()
82
+ options[:chef_binary_path].should eql 'c:\opscode\chef\bin\chef-client'
83
+ end
84
+
85
+ end
86
+
87
+ describe 'prepare_for_chef_run' do
88
+ it 'should upload cheftask scripts' do
89
+ winrmshell = double()
90
+ @windows_machine.stubs(:winrmshell).returns(winrmshell)
91
+
92
+ winrmshell.should_receive(:upload).with(anything(), 'c:\tmp\vagrant-chef-1\cheftaskrun.ps1')
93
+ winrmshell.should_receive(:upload).with(anything(), 'c:\tmp\vagrant-chef-1\cheftask.xml')
94
+ winrmshell.should_receive(:upload).with(anything(), 'c:\tmp\vagrant-chef-1\cheftask.ps1')
95
+
96
+ @chef_cmd_builder.prepare_for_chef_run()
97
+ end
98
+
99
+ end
100
+
101
+ end
@@ -37,6 +37,20 @@ describe VagrantWindows::WindowsMachine , :unit => true do
37
37
  expect(windows_machine.is_virtualbox?()).to be_false
38
38
  end
39
39
  end
40
+
41
+ describe "is_parallels?" do
42
+ it "should be true for parallels" do
43
+ machine = stub(:provider_name => :parallels)
44
+ windows_machine = VagrantWindows::WindowsMachine.new(machine)
45
+ expect(windows_machine.is_parallels?()).to be_true
46
+ end
47
+
48
+ it "should be false for vmware_workstation" do
49
+ machine = stub(:provider_name => :vmware_workstation)
50
+ windows_machine = VagrantWindows::WindowsMachine.new(machine)
51
+ expect(windows_machine.is_parallels?()).to be_false
52
+ end
53
+ end
40
54
 
41
55
  describe "is_windows?" do
42
56
  it "should return true when config vm guest is windows" do
@@ -45,6 +59,14 @@ describe VagrantWindows::WindowsMachine , :unit => true do
45
59
  machine = stub(:config => config)
46
60
  expect(VagrantWindows::WindowsMachine.is_windows?(machine)).to be_true
47
61
  end
62
+
63
+ it "instance should return true when config vm guest is windows" do
64
+ vm = stub(:guest => :windows)
65
+ config = stub(:vm => vm)
66
+ machine = stub(:config => config)
67
+ windows_machine = VagrantWindows::WindowsMachine.new(machine)
68
+ expect(windows_machine.is_windows?()).to be_true
69
+ end
48
70
 
49
71
  it "should return false when config vm guest is not windows" do
50
72
  vm = stub(:guest => :ubuntu)
@@ -52,6 +74,14 @@ describe VagrantWindows::WindowsMachine , :unit => true do
52
74
  machine = stub(:config => config)
53
75
  expect(VagrantWindows::WindowsMachine.is_windows?(machine)).to be_false
54
76
  end
77
+
78
+ it "instance should return false when config vm guest is not windows" do
79
+ vm = stub(:guest => :fedora)
80
+ config = stub(:vm => vm)
81
+ machine = stub(:config => config)
82
+ windows_machine = VagrantWindows::WindowsMachine.new(machine)
83
+ expect(windows_machine.is_windows?()).to be_false
84
+ end
55
85
  end
56
86
 
57
87
  describe "read_forwarded_ports" do
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-windows
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
5
- prerelease:
4
+ version: 1.6.0.pre.1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Paul Morton
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-01-08 00:00:00.000000000 Z
13
+ date: 2014-02-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: winrm
@@ -142,6 +142,7 @@ files:
142
142
  - lib/vagrant-windows/monkey_patches/plugins/provisioners/puppet/provisioner/puppet_server.rb
143
143
  - lib/vagrant-windows/monkey_patches/plugins/provisioners/shell/provisioner.rb
144
144
  - lib/vagrant-windows/plugin.rb
145
+ - lib/vagrant-windows/provisioners/chef_command_builder.rb
145
146
  - lib/vagrant-windows/scripts/cheftask.ps1.erb
146
147
  - lib/vagrant-windows/scripts/cheftask.xml.erb
147
148
  - lib/vagrant-windows/scripts/cheftaskrun.ps1.erb
@@ -158,6 +159,7 @@ files:
158
159
  - Rakefile
159
160
  - README.md
160
161
  - spec/spec_helper.rb
162
+ - spec/vagrant-windows/chef_command_builder_spec.rb
161
163
  - spec/vagrant-windows/guestnetwork_spec.rb
162
164
  - spec/vagrant-windows/helper_spec.rb
163
165
  - spec/vagrant-windows/mount_shared_folder_spec.rb
@@ -185,16 +187,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
187
  version: '0'
186
188
  segments:
187
189
  - 0
188
- hash: -4320786780650999420
190
+ hash: 1012872433486920288
189
191
  required_rubygems_version: !ruby/object:Gem::Requirement
190
192
  none: false
191
193
  requirements:
192
- - - ! '>='
194
+ - - ! '>'
193
195
  - !ruby/object:Gem::Version
194
- version: '0'
195
- segments:
196
- - 0
197
- hash: -4320786780650999420
196
+ version: 1.3.1
198
197
  requirements: []
199
198
  rubyforge_project:
200
199
  rubygems_version: 1.8.23
@@ -204,6 +203,7 @@ summary: A small gem that adds windows guest support to vagrant, uses WinRM as t
204
203
  Communication Channel
205
204
  test_files:
206
205
  - spec/spec_helper.rb
206
+ - spec/vagrant-windows/chef_command_builder_spec.rb
207
207
  - spec/vagrant-windows/guestnetwork_spec.rb
208
208
  - spec/vagrant-windows/helper_spec.rb
209
209
  - spec/vagrant-windows/mount_shared_folder_spec.rb