vagrant-windows 0.1.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6373e5fcaeafb284ed319640b162f38d2c1fbb42
4
+ data.tar.gz: f292ab1b6c18eb837fd7b5d8f9b2bc34dfda6aad
5
+ SHA512:
6
+ metadata.gz: e86f29b4b5661bd43041cda843cf062735b3f66ca80a20a0c097724572a3124a4131bb809201bc8e77767e845c2a998350be3af2028108eb40c6e781dd6d0c96
7
+ data.tar.gz: 770f88ccf1d8bc53f22921a56dc1a27c5176b93c6bc8e4eab9336ab21d19706558a1c1f02ac3136302110313518d8275c207074db8ad5b2b76ade076edeca977
data/Gemfile.lock CHANGED
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vagrant-windows (0.1.1)
4
+ vagrant-windows (0.2.0)
5
5
  highline
6
- vagrant (~> 1.0.3)
7
6
  winrm (~> 1.1.1)
8
7
 
9
8
  GEM
@@ -12,32 +11,22 @@ GEM
12
11
  akami (1.2.0)
13
12
  gyoku (>= 0.4.0)
14
13
  nokogiri (>= 1.4.0)
15
- archive-tar-minitar (0.5.2)
16
- builder (3.1.3)
17
- childprocess (0.3.5)
18
- ffi (~> 1.0, >= 1.0.6)
19
- erubis (2.7.0)
20
- ffi (1.1.5)
14
+ builder (3.0.4)
15
+ ffi (1.4.0)
21
16
  gssapi (1.0.3)
22
17
  ffi (>= 1.0.1)
23
18
  gyoku (0.4.6)
24
19
  builder (>= 2.1.2)
25
- highline (1.6.14)
20
+ highline (1.6.15)
26
21
  httpclient (2.2.0.2)
27
22
  httpi (0.9.7)
28
23
  rack
29
- i18n (0.6.1)
30
- json (1.5.4)
31
24
  little-plugger (1.1.3)
32
- log4r (1.1.10)
33
25
  logging (1.6.2)
34
26
  little-plugger (>= 1.1.3)
35
- net-scp (1.0.4)
36
- net-ssh (>= 1.99.1)
37
- net-ssh (2.2.2)
38
- nokogiri (1.5.5)
27
+ nokogiri (1.5.6)
39
28
  nori (1.1.3)
40
- rack (1.4.1)
29
+ rack (1.5.2)
41
30
  rubyntlm (0.1.1)
42
31
  savon (0.9.5)
43
32
  akami (~> 1.0)
@@ -48,15 +37,6 @@ GEM
48
37
  nori (~> 1.0)
49
38
  wasabi (~> 1.0)
50
39
  uuidtools (2.1.3)
51
- vagrant (1.0.3)
52
- archive-tar-minitar (= 0.5.2)
53
- childprocess (~> 0.3.1)
54
- erubis (~> 2.7.0)
55
- i18n (~> 0.6.0)
56
- json (~> 1.5.1)
57
- log4r (~> 1.1.9)
58
- net-scp (~> 1.0.4)
59
- net-ssh (~> 2.2.2)
60
40
  wasabi (1.0.0)
61
41
  nokogiri (>= 1.4.0)
62
42
  winrm (1.1.2)
data/README.md CHANGED
@@ -1,35 +1,33 @@
1
-
2
- Installing
3
- ==========
4
1
 
5
- ```
6
- gem install vagrant-windows
7
- ```
2
+ Installing Vagrant-Windows
3
+ ==========================
4
+
5
+ - Vagrant 1.0 should use <code>gem "vagrant-windows", "~> 0.1.2"</code>
6
+ - Vagrant 1.1 should use <code>gem "vagrant-windows", "~> 1.0.0"</code>
7
+ - Vagrant 1.2 is not yet supported. There needs to be a refactor to support capabilities. We are looking for a backwards compatiable way to implement this.
8
+
8
9
 
9
10
  Building a Base Box
10
11
  ===================
11
12
 
12
13
  All Windows Machines
13
14
  --------------------
14
- -Enable WinRM
15
-
16
- ```
15
+ -Enable WinRM
16
+ ```
17
17
  winrm quickconfig -q
18
18
  winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"}
19
19
  winrm set winrm/config @{MaxTimeoutms="1800000"}
20
20
  winrm set winrm/config/service @{AllowUnencrypted="true"}
21
21
  winrm set winrm/config/service/auth @{Basic="true"}
22
- ```
23
- - Create a vagrant user
24
- - For things to work out of the box, username and password should both be vagrant
25
-
22
+ ```
23
+ - Create a vagrant user, for things to work out of the box username and password should both be "vagrant".
26
24
  - Turn off UAC (Msconfig)
27
25
  - Disable complex passwords
28
26
 
29
27
  Servers
30
28
  --------
31
- - Disable Shutdown Tracker (http://www.jppinto.com/2010/01/how-to-disable-the-shutdown-event-tracker-in-server-20032008/)
32
- - Disable "Server Manager" Starting at login (http://www.elmajdal.net/win2k8/How_to_Turn_Off_The_Automatic_Display_of_Server_Manager_At_logon.aspx)
29
+ - [Disable Shutdown Tracker](http://www.jppinto.com/2010/01/how-to-disable-the-shutdown-event-tracker-in-server-20032008/)
30
+ - [Disable "Server Manager" Starting at login](http://www.elmajdal.net/win2k8/How_to_Turn_Off_The_Automatic_Display_of_Server_Manager_At_logon.aspx)
33
31
 
34
32
  The Vagrant File
35
33
  ================
@@ -37,51 +35,95 @@ The Vagrant File
37
35
  Add the following to your Vagrantfile
38
36
 
39
37
  ```ruby
40
- config.vm.guest = :windows
41
-
42
- config.vm.forward_port 3389, 3390, :name => "rdp", :auto => true
43
- config.vm.forward_port 5985, 5985, :name => "winrm", :auto => true
38
+ config.vm.guest = :windows
39
+ config.windows.halt_timeout = 15
40
+ config.winrm.username = "vagrant"
41
+ config.winrm.password = "vagrant"
42
+ config.vm.network :forwarded_port, guest: 3389, host: 3389
43
+ config.vm.network :forwarded_port, guest: 5985, host: 5985
44
44
  ```
45
45
 
46
46
  Example:
47
47
  ```ruby
48
- Vagrant::Config.run do |config|
49
-
50
- #The following timeout configuration is option, however if have
51
- #any large remote_file resources in your chef recipes, you may
52
- #experience timeouts (reported as 500 responses)
53
- config.winrm.timeout = 1800 #Set WinRM Timeout in seconds (Default 30)
48
+ Vagrant.configure("2") do |config|
49
+
50
+ # Max time to wait for the guest to shutdown
51
+ config.windows.halt_timeout = 15
52
+
53
+ # Admin user name and password
54
+ config.winrm.username = "vagrant"
55
+ config.winrm.password = "vagrant"
54
56
 
55
57
  # Configure base box parameters
56
- config.vm.box = "windows2008r2"
57
- config.vm.box_url = "./windows-2008-r2.box"
58
+ config.vm.box = "vagrant-windows2008r2"
59
+ config.vm.box_url = "./vagrant-windows2008r2.box"
58
60
  config.vm.guest = :windows
59
61
 
60
- config.vm.forward_port 3389, 3390, :name => "rdp", :auto => true
61
- config.vm.forward_port 5985, 5985, :name => "winrm", :auto => true
62
-
63
- config.vm.provision :chef_solo do |chef|
64
- chef.add_recipe("your::recipe")
65
- end
66
-
62
+ # Port forward WinRM and RDP
63
+ config.vm.network :forwarded_port, guest: 3389, host: 3389
64
+ config.vm.network :forwarded_port, guest: 5985, host: 5985
65
+
67
66
  end
68
67
  ````
69
68
 
69
+ Available Config Parameters:
70
+
71
+ * ```config.windows.halt_timeout``` - How long Vagrant should wait for the guest to shutdown before forcing exit, defaults to 30 seconds
72
+ * ```config.windows.halt_check_interval``` - How often Vagrant should check if the system has shutdown, defaults to 1 second
73
+ * ```config.winrm.username``` - The Windows guest admin user name, defaults to vagrant.
74
+ * ```config.winrm.password``` - The above's password, defaults to vagrant.
75
+ * ```config.winrm.host``` - The IP of the guest, but because we use NAT with port forwarding this defaults to localhost.
76
+ * ```config.winrm.guest_port``` - The guest's WinRM port, defaults to 5985.
77
+ * ```config.winrm.port``` - The WinRM port on the host, defaults to 5985. You might need to change this if your hosts is also Windows.
78
+ * ```config.winrm.max_tries``` - The number of retries to connect to WinRM, defaults to 12.
79
+ * ```config.winrm.timeout``` - The max number of seconds to wait for a WinRM response, defaults to 1800 seconds.
80
+
81
+ Note - You need to ensure you specify a config.windows and a config.winrm in your Vagrantfile. Currently there's a problem where
82
+ Vagrant will not load the plugin config even with defaults if at least one of its values doesn't exist in the Vagrantfile.
83
+
84
+
70
85
  What Works?
71
86
  ===========
72
- - vagrant up|hault|reload|provision
87
+ - vagrant up|halt|reload|provision
73
88
  - Chef Vagrant Provisioner
89
+ - Puppet Vagrant Provisioner
74
90
 
75
91
  What has not been tested
76
92
  ========================
77
- - Everything Else!!!
78
- - Shell and Puppet Provisioners
79
- - Shell should work, though I have not vetted it yet.
93
+ - Shell provisioning. Shell should work, though I have not vetted it yet.
80
94
 
81
- What does not work
82
- ==================
83
- - <s>Complex networking setups</s> - Fixed in 0.0.3
84
- - Note that I have not tested the Virtual Box 4.0 Driver, all _should_ work. Can someone please confirm?
95
+ TODOs
96
+ =========
97
+ 1. Test it! We need to test on more hosts, guests, and VBox versions. Help wanted.
98
+ 2. Vagrant 1.2 support. Unfortunately it appears there are some breaking changes with guests between Vagrant 1.1. and 1.2.
99
+ 3. Chef-Client support.
100
+ 3. Unit tests.
101
+ 4. Better docs.
102
+
103
+ Troubleshooting
104
+ ===============
105
+
106
+ I get a 401 auth error from WinRM
107
+ ---------------------------------
108
+ - Ensure you've followed the WinRM configuration instructions above.
109
+ - Ensure you can manually login using the specified config.winrm.username you've specified in your Vagrantfile.
110
+ - Ensure your password hasn't expired.
111
+ - Ensure your password doesn't need to be changed because of policy.
112
+
113
+ I get a non-401 error from WinRM waiting for the VM to boot
114
+ -----------------------------------------------------------
115
+ - Ensure you've properly setup port forwarding of WinRM
116
+ - Make sure your VM can boot manually through VBox.
117
+
118
+ SQL Server cookbook fails to install through Vagrant
119
+ ----------------------------------------------------
120
+ - Ensure UAC is turned off
121
+ - Ensure your vagrant user is an admin on the guest
122
+ - The SQL Server installer uses a lot of resources, ensure WinRM Quota Management is properly configured to give it enough resources.
123
+ - See [COOK-1172](http://tickets.opscode.com/browse/COOK-1172) and http://stackoverflow.com/a/15235996/82906 for more information.
124
+
125
+ If all else fails try running [vagrant with debug logging](http://docs.vagrantup.com/v2/debugging.html), perhaps that will give
126
+ you enough insight to fix the problem or file an issue.
85
127
 
86
128
  What Can I do to help?
87
129
  ======================
@@ -100,10 +142,16 @@ Contributing
100
142
  References and Shout Outs
101
143
  =========================
102
144
  - Chris McClimans - Vagrant Branch (https://github.com/hh/vagrant/blob/feature/winrm/)
103
- -Dan Wanek - WinRM GEM (https://github.com/zenchild/WinRM)
145
+ - Dan Wanek - WinRM GEM (https://github.com/zenchild/WinRM)
104
146
  - +1 For being super responsive to pull requests.
105
147
 
106
148
 
107
149
  Changelog
108
150
  =========
109
- 0.1.1 - Remove extra debug information from command output.
151
+ 0.1.1 - Remove extra debug information from command output.
152
+
153
+ 0.1.2 - Added virtual box 4.2 support.
154
+
155
+ 0.1.3 - Added puppet provisioner.
156
+
157
+ 1.0.0 - Converted to Vagrant 1.1.x plugin architecture.
@@ -0,0 +1,213 @@
1
+ require 'timeout'
2
+ require 'winrm'
3
+ require 'log4r'
4
+ require 'vagrant/util/ansi_escape_code_remover'
5
+ require 'vagrant/util/file_mode'
6
+ require 'vagrant/util/platform'
7
+ require 'vagrant/util/retryable'
8
+
9
+ module VagrantWindows
10
+ module Communication
11
+ # Provides communication with the VM via WinRM.
12
+ class WinRMCommunicator < Vagrant.plugin("2", :communicator)
13
+
14
+ include Vagrant::Util::ANSIEscapeCodeRemover
15
+ include Vagrant::Util::Retryable
16
+
17
+ attr_reader :logger
18
+ attr_reader :machine
19
+
20
+ def self.match?(machine)
21
+ machine.config.vm.guest.eql? :windows
22
+ end
23
+
24
+ def initialize(machine)
25
+ @machine = machine
26
+ @logger = Log4r::Logger.new("vagrant_windows::communication::winrmcommunicator")
27
+ @logger.debug("initializing WinRMCommunicator")
28
+ end
29
+
30
+ def ready?
31
+ logger.debug("Checking whether WinRM is ready...")
32
+
33
+ Timeout.timeout(@machine.config.winrm.timeout) do
34
+ execute("hostname") do |type, data|
35
+ @logger.debug("hostname: #{data}")
36
+ end
37
+ end
38
+
39
+ # If we reached this point then we successfully connected
40
+ logger.debug("WinRM is ready!")
41
+ true
42
+ end
43
+
44
+ def execute(command, opts=nil, &block)
45
+ opts = {
46
+ :error_check => true,
47
+ :error_class => Errors::WinRMExecutionError,
48
+ :error_key => :winrm_bad_exit_status,
49
+ :command => command,
50
+ :sudo => false,
51
+ :shell => :powershell
52
+ }.merge(opts || {})
53
+
54
+ command = VagrantWindows.load_script("command_alias.ps1") << "\r\n" << command
55
+ exit_status = 0
56
+
57
+ begin
58
+ # Connect via WinRM and execute the command in the shell.
59
+ exceptions = [HTTPClient::KeepAliveDisconnected]
60
+ exit_status = retryable(:tries => @machine.config.winrm.max_tries, :on => exceptions, :sleep => 10) do
61
+ shell_execute(command, opts[:shell], &block)
62
+ end
63
+ rescue StandardError => e
64
+ # return a more specific auth error for 401 errors
65
+ if e.message.include?("401")
66
+ raise Errors::WinRMAuthorizationError,
67
+ :user => @machine.config.winrm.username,
68
+ :password => @machine.config.winrm.password,
69
+ :endpoint => endpoint,
70
+ :message => e.message
71
+ end
72
+ # failed for an unknown reason, didn't even get an exit status
73
+ raise Errors::WinRMExecutionError,
74
+ :shell => opts[:shell],
75
+ :command => command,
76
+ :message => e.message
77
+ end
78
+
79
+ # Check for any exit status errors
80
+ if opts[:error_check] && exit_status != 0
81
+ error_opts = opts.merge(:_key => opts[:error_key], :exit_status => exit_status)
82
+ raise error_opts[:error_class], error_opts
83
+ end
84
+
85
+ exit_status
86
+ end
87
+
88
+ # Wrap Sudo in execute.... One day we could integrate with UAC, but Icky
89
+ def sudo(command, opts=nil, &block)
90
+ execute(command, opts, &block)
91
+ end
92
+
93
+ def download(from, to=nil)
94
+ @logger.warn("Downloading: #{from} to #{to} not supported on Windows guests")
95
+ end
96
+
97
+ def test(command, opts=nil)
98
+ opts = { :error_check => false }.merge(opts || {})
99
+ execute(command, opts) == 0
100
+ end
101
+
102
+ def upload(from, to)
103
+ @logger.debug("Uploading: #{from} to #{to}")
104
+
105
+ file = "winrm-upload-#{rand()}"
106
+ file_name = (session.cmd("echo %TEMP%\\#{file}"))[:data][0][:stdout].chomp
107
+ session.powershell <<-EOH
108
+ if(Test-Path #{to})
109
+ {
110
+ rm #{to}
111
+ }
112
+ EOH
113
+ Base64.encode64(IO.binread(from)).gsub("\n",'').chars.to_a.each_slice(8000-file_name.size) do |chunk|
114
+ out = session.cmd( "echo #{chunk.join} >> \"#{file_name}\"" )
115
+ end
116
+ execute "mkdir [System.IO.Path]::GetDirectoryName(\"#{to}\")"
117
+ execute <<-EOH
118
+ $base64_string = Get-Content \"#{file_name}\"
119
+ $bytes = [System.Convert]::FromBase64String($base64_string)
120
+ $new_file = [System.IO.Path]::GetFullPath(\"#{to}\")
121
+ [System.IO.File]::WriteAllBytes($new_file,$bytes)
122
+ EOH
123
+ end
124
+
125
+ def new_session
126
+ opts = endpoint_options()
127
+ logger.debug("Creating WinRM session to #{endpoint} with options: #{opts}")
128
+
129
+ client = ::WinRM::WinRMWebService.new(endpoint, :plaintext, opts)
130
+ client.set_timeout(opts[:operation_timeout])
131
+ client.toggle_nori_type_casting(:off) #we don't want coersion of types
132
+ client
133
+ end
134
+
135
+ def session
136
+ @session ||= new_session
137
+ end
138
+
139
+ protected
140
+
141
+ def endpoint_options
142
+ {
143
+ :user => @machine.config.winrm.username,
144
+ :pass => @machine.config.winrm.password,
145
+ :host => @machine.config.winrm.host,
146
+ :port => winrm_port(),
147
+ :operation_timeout => @machine.config.winrm.timeout,
148
+ :basic_auth_only => true
149
+ }.merge ({})
150
+ end
151
+
152
+ def winrm_port
153
+ @winrm_port ||= find_winrm_host_port()
154
+ end
155
+
156
+ def find_winrm_host_port
157
+ expected_guest_port = @machine.config.winrm.guest_port
158
+ @logger.debug("Searching for WinRM port: #{expected_guest_port.inspect}")
159
+
160
+ # Look for the forwarded port only by comparing the guest port
161
+ @machine.provider.driver.read_forwarded_ports.each do |_, _, hostport, guestport|
162
+ return hostport if guestport == expected_guest_port
163
+ end
164
+
165
+ @machine.config.winrm.port
166
+ end
167
+
168
+ def endpoint
169
+ if !@winrm_endpoint
170
+ opts = endpoint_options()
171
+ @winrm_endpoint = "http://#{opts[:host]}:#{opts[:port]}/wsman"
172
+ end
173
+ @winrm_endpoint
174
+ end
175
+
176
+ # Executes the command on an SSH connection within a login shell.
177
+ def shell_execute(command, shell=:powershell, &block)
178
+ @logger.debug("#{shell} executing:\n#{command}")
179
+
180
+ if shell.eql? :cmd
181
+ output = session.cmd(command) do |out, err|
182
+ handle_out(:stdout, out, &block)
183
+ handle_out(:stderr, err, &block)
184
+ end
185
+ elsif shell.eql? :powershell
186
+ output = session.powershell(command) do |out, err|
187
+ handle_out(:stdout, out, &block)
188
+ handle_out(:stderr, err, &block)
189
+ end
190
+ else
191
+ raise Errors::WinRMInvalidShell, :shell => shell
192
+ end
193
+
194
+ exit_status = output[:exitcode]
195
+ @logger.debug("Exit status: #{exit_status.inspect}")
196
+
197
+ # Return the final exit status
198
+ return exit_status
199
+ end
200
+
201
+ def handle_out(type, data, &block)
202
+ if block_given? && data
203
+ if data =~ /\n/
204
+ data.split(/\n/).each { |d| block.call(type, d) }
205
+ else
206
+ block.call(type, data)
207
+ end
208
+ end
209
+ end
210
+
211
+ end #WinRM class
212
+ end
213
+ end
@@ -1,27 +1,31 @@
1
- module Vagrant
1
+ require "vagrant"
2
+
3
+ module VagrantWindows
2
4
  module Config
3
- class Windows < Vagrant::Config::Base
4
- attr_accessor :winrm_user
5
- attr_accessor :winrm_password
5
+ class Windows < Vagrant.plugin("2", :config)
6
+
6
7
  attr_accessor :halt_timeout
7
8
  attr_accessor :halt_check_interval
8
- attr_accessor :device
9
9
 
10
10
  def initialize
11
- @winrm_user = 'vagrant'
12
- @winrm_password = 'vagrant'
13
- @halt_timeout = 30
14
- @halt_check_interval = 1
15
- @device = "e1000g"
11
+ @halt_timeout = UNSET_VALUE
12
+ @halt_check_interval = UNSET_VALUE
13
+ end
14
+
15
+ def validate(machine)
16
+ errors = []
17
+
18
+ errors << "windows.halt_timeout cannot be nil." if machine.config.windows.halt_timeout.nil?
19
+ errors << "windows.halt_check_interval cannot be nil." if machine.config.windows.halt_check_interval.nil?
20
+
21
+ { "Windows Guest" => errors }
16
22
  end
17
23
 
18
- def validate(env, errors)
19
- [ :winrm_user, :winrm_password].each do |field|
20
- errors.add(I18n.t("vagrant.config.common.error_empty", :field => field)) if !instance_variable_get("@#{field}".to_sym)
21
- end
24
+ def finalize!
25
+ @halt_timeout = 30 if @halt_timeout == UNSET_VALUE
26
+ @halt_check_interval = 1 if @halt_check_interval == UNSET_VALUE
22
27
  end
28
+
23
29
  end
24
30
  end
25
31
  end
26
-
27
- Vagrant.config_keys.register(:windows) { Vagrant::Config::Windows }
@@ -1,6 +1,9 @@
1
- module Vagrant
1
+ require "vagrant"
2
+
3
+ module VagrantWindows
2
4
  module Config
3
- class WinRM < Vagrant::Config::Base
5
+ class WinRM < Vagrant.plugin("2", :config)
6
+
4
7
  attr_accessor :username
5
8
  attr_accessor :password
6
9
  attr_accessor :host
@@ -8,24 +11,41 @@ module Vagrant
8
11
  attr_accessor :guest_port
9
12
  attr_accessor :max_tries
10
13
  attr_accessor :timeout
11
-
14
+
12
15
  def initialize
13
- @username = "vagrant"
14
- @password = "vagrant"
15
- @guest_port = 5985
16
- @host = "localhost"
17
- @max_tries = 12
18
- @timeout = 1800
16
+ @username = UNSET_VALUE
17
+ @password = UNSET_VALUE
18
+ @host = UNSET_VALUE
19
+ @port = UNSET_VALUE
20
+ @guest_port = UNSET_VALUE
21
+ @max_tries = UNSET_VALUE
22
+ @timeout = UNSET_VALUE
19
23
  end
20
24
 
21
- def validate(env, errors)
22
- [:username, :password, :host, :max_tries, :timeout].each do |field|
23
- errors.add(I18n.t("vagrant.config.common.error_empty", :field => field)) if !instance_variable_get("@#{field}".to_sym)
24
- end
25
+ def validate(machine)
26
+ errors = []
27
+
28
+ errors << "winrm.username cannot be nil." if machine.config.winrm.username.nil?
29
+ errors << "winrm.password cannot be nil." if machine.config.winrm.password.nil?
30
+ errors << "winrm.host cannot be nil." if machine.config.winrm.host.nil?
31
+ errors << "winrm.port cannot be nil." if machine.config.winrm.port.nil?
32
+ errors << "winrm.guest_port cannot be nil." if machine.config.winrm.guest_port.nil?
33
+ errors << "winrm.max_tries cannot be nil." if machine.config.winrm.max_tries.nil?
34
+ errors << "winrm.timeout cannot be nil." if machine.config.winrm.timeout.nil?
25
35
 
36
+ { "WinRM" => errors }
26
37
  end
38
+
39
+ def finalize!
40
+ @username = "vagrant" if @username == UNSET_VALUE
41
+ @password = "vagrant" if @password == UNSET_VALUE
42
+ @host = "localhost" if @host == UNSET_VALUE
43
+ @port = 5985 if @port == UNSET_VALUE
44
+ @guest_port = 5985 if @guest_port == UNSET_VALUE
45
+ @max_tries = 12 if @max_tries == UNSET_VALUE
46
+ @timeout = 1800 if @timeout == UNSET_VALUE
47
+ end
48
+
27
49
  end
28
50
  end
29
51
  end
30
-
31
- Vagrant.config_keys.register(:winrm) { Vagrant::Config::WinRM }
@@ -1,22 +1,27 @@
1
- module Vagrant
1
+ require 'vagrant/errors'
2
+
3
+ module VagrantWindows
2
4
  module Errors
3
- class WinRMPortNotDetected < VagrantError
4
- status_code(550)
5
+
6
+ class VagrantWindowsError < ::Vagrant::Errors::VagrantError
7
+ error_namespace("vagrant_windows.errors")
8
+ end
9
+
10
+ class WinRMPortNotDetected < VagrantWindowsError
5
11
  error_key(:winrm_port_not_detected)
6
12
  end
7
13
 
8
- class WinRMInvalidShell < VagrantError
9
- status_code(551)
14
+ class WinRMInvalidShell < VagrantWindowsError
10
15
  error_key(:winrm_invalid_shell)
11
16
  end
12
- class WinRMTransferError < VagrantError
13
- status_code(552)
14
- error_key(:winrm_upload_error)
15
- end
16
- class WinRMTimeout < VagrantError
17
- status_code(553)
18
- error_key(:winrm_timeout)
17
+
18
+ class WinRMExecutionError < VagrantWindowsError
19
+ error_key(:winrm_execution_error)
19
20
  end
21
+
22
+ class WinRMAuthorizationError < VagrantWindowsError
23
+ error_key(:winrm_auth_error)
24
+ end
20
25
 
21
26
  end
22
27
  end