knife-windows 0.8.0.rc.0 → 0.8.0.rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODE4MTk3MDE3NGMxZTEyZWNkYjk5ODg1Y2Q2ZDg2YTNkNTQ5M2M1MA==
4
+ MzZkYmVmZGQwY2Y4ZWRjNDNhYjMwYTI3ZTEzYzMwYmRkYjQ0OWJiZQ==
5
5
  data.tar.gz: !binary |-
6
- ZjFlZGMzMWZmZDNiZWVkOWQ5MTEzYTM1OTVmMjg0ZmRlZDlhZDgyZg==
6
+ ZjE5MzMwYWQ1ODNlMDNiMjRhMDMyZGU3YWJmNGZjZjg5MjQ0MDFkMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODRlYmEzMmQ2Y2QxZGU5M2I2MTdiNjAwMjg5NmNiZDdlOTY1MjBkNDExYjY0
10
- OGRjODhhMmMzNDg1NTRhYjI3YTRmNDkzNTBmMTVlNWZiNTk2MDRkNTNiZjdh
11
- Mjg0YTNhZDYwOGUwM2JlMTFjNTYzZDg4NmQ2OGIxNzkzMTgwZjI=
9
+ ZTdlOWZhZjliYjg0ZGQwZDk5N2NmOWUzMjE3ZTJiNTNjZGRhYTQwZDJiOGE3
10
+ ZTE4ZGRhZTU0ODJlNWM2YzNkOWZmNmFmMWMwOWJhMjEyYTcyYThjZGY3ZDQw
11
+ MzI2YzY4ZTNkZWY1OTA1ODQ0M2U1M2QxZTczMzQwZDc3YjRjM2Y=
12
12
  data.tar.gz: !binary |-
13
- ZDIyNmIxNjk0ZTc0NTg0NmQ2ZGM3ZTY2MGFlY2UzM2VhNWM2NjZhNWM1MzNm
14
- MjI3MDE4YWQ5ODYwN2QzYzExNTEzZmJiNmJjNzdhZTc0ZmI1ZTFmOTQ0NDQy
15
- NGNjNTVlMjMwOWU4Mzk3NjI3MTIxMjM2MmQ3YjNmYzA3MjNiOTA=
13
+ NGU0MGRjNTE2YjFiMzMyMzRmOWVlNjM2ZTk3Nzg3NTYwYzhkNWNlMzQ3MWFl
14
+ Njc2MjdkYTUyNzhmMThkYTM0MjEyZDk2NmI1ODQ2ZWE5MjJkMWJhYmZjYjQ0
15
+ MGU0NzY0MzMzMWQ1NjhhYmUyOTMyNzljNGU5NDFmMWQ0MTcxNGE=
data/CHANGELOG.md CHANGED
@@ -4,6 +4,8 @@
4
4
  None.
5
5
 
6
6
  ## Latest release: 0.8.0
7
+ * [knife-windows #98](https://github.com/opscode/knife-windows/issues/96) Get winrm command exit code if it is not expected
8
+ * [knife-windows #96](https://github.com/opscode/knife-windows/issues/96) Fix break from OS patch KB2918614
7
9
  * Update winrm-s dependency along with em-winrm and winrm dependencies
8
10
  * Return failure codes from knife winrm even when `returns` is not set
9
11
  * Support Windows negotiate authentication protocol when running knife on Windows
data/RELEASE_NOTES.md CHANGED
@@ -11,8 +11,7 @@ This release of knife-windows enables the Windows negotiate protocol to be
11
11
  used with the `winrm` and `bootstrap windows winrm` subcommands and also
12
12
  contains bug fixes and dependency updates.
13
13
 
14
- A thank you goes to contributor **Josh Mahowald** for contributing a fix for
15
- [KNIFE-450](https://tickets.opscode.com/browse/KNIFE-450).
14
+ A thank you goes to contributor **Josh Mahowald** for contributing a fix to return nonzero exit codes.
16
15
 
17
16
  Issues with `knife-windows` should be reported in the ticketing system at
18
17
  https://github.com/opscode/knife-windows/issues. Learn more about how you can
@@ -37,18 +36,9 @@ https://rubygems.org/gems/knife-windows
37
36
  https://github.com/opscode/knife-windows
38
37
 
39
38
  ## Issues fixed in knife-windows 0.8.0
40
- * [KNIFE-386](https://tickets.opscode.com/browse/KNIFE-386) Wait for a valid command response before bootstrapping over WinRM
41
- * [KNIFE-394](https://tickets.opscode.com/browse/KNIFE-394) Update em-winrm dependency
42
- * [KNIFE-450](https://tickets.opscode.com/browse/KNIFE-450) Set knife winrm command exit status on exception and command failure
39
+ * [knife-windows #98](https://github.com/opscode/knife-windows/issues/96) Get winrm command exit code if it is not expected
40
+ * [knife-windows #96](https://github.com/opscode/knife-windows/issues/96) Fix break from OS patch KB2918614
41
+ * Update winrm-s dependency along with em-winrm and winrm dependencies
42
+ * Return failure codes from knife winrm even when `returns` is not set
43
+ * Support Windows negotiate authentication protocol when running knife on Windows
43
44
 
44
- ## knife-windows breaking changes
45
-
46
- ### Error status being returned from `winrm` and `bootstrap windows winrm` remote commands
47
-
48
- Previously, `knife winrm` would always return an exit status of 0 if it was able to
49
- execute a command on the remote node, regardless whether the command that it
50
- invoked on the remote node returned a status of 0. It now returns a non-zero
51
- exit code if the command's exit code was non-zero. This may cause failures in
52
- scripts that use the `knife winrm` or `knife bootstrap windows winrm` commands
53
- and check to see if the exit status of the command is successful (0). Such
54
- scripts should be altered to ignore the exit status if the failure is truly non-fatal.
@@ -149,7 +149,9 @@ WGET_PS
149
149
  end
150
150
 
151
151
  def install_chef
152
- install_chef = 'msiexec /qn /log "%CHEF_CLIENT_MSI_LOG_PATH%" /i "%LOCAL_DESTINATION_MSI_PATH%"'
152
+ # The normal install command uses regular double quotes in
153
+ # the install command, so request such a string from install_command
154
+ install_chef = install_command('"') + "\n" + fallback_install_task_command
153
155
  end
154
156
 
155
157
  def bootstrap_directory
@@ -171,6 +173,54 @@ WGET_PS
171
173
  def escape_and_echo(file_contents)
172
174
  file_contents.gsub(/^(.*)$/, 'echo.\1').gsub(/([(<|>)^])/, '^\1')
173
175
  end
176
+
177
+ private
178
+
179
+ def install_command(executor_quote)
180
+ "msiexec /qn /log #{executor_quote}%CHEF_CLIENT_MSI_LOG_PATH%#{executor_quote} /i #{executor_quote}%LOCAL_DESTINATION_MSI_PATH%#{executor_quote}"
181
+ end
182
+
183
+ def fallback_install_task_command
184
+ # This command will be executed by schtasks.exe in the batch
185
+ # code below. To handle tasks that contain arguments that
186
+ # need to be double quoted, schtasks allows the use of single
187
+ # quotes that will later be converted to double quotes
188
+ command = install_command('\'')
189
+ <<-EOH
190
+ @set MSIERRORCODE=!ERRORLEVEL!
191
+ @if ERRORLEVEL 1 (
192
+ @echo WARNING: Failed to install Chef Client MSI package in remote context with status code !MSIERRORCODE!.
193
+ @echo WARNING: This may be due to a defect in operating system update KB2918614: http://support.microsoft.com/kb/2918614
194
+ @set OLDLOGLOCATION="%CHEF_CLIENT_MSI_LOG_PATH%-fail.log"
195
+ @move "%CHEF_CLIENT_MSI_LOG_PATH%" "!OLDLOGLOCATION!" > NUL
196
+ @echo WARNING: Saving installation log of failure at !OLDLOGLOCATION!
197
+ @echo WARNING: Retrying installation with local context...
198
+ @schtasks /create /f /sc once /st 00:00:00 /tn chefclientbootstraptask /ru SYSTEM /rl HIGHEST /tr \"cmd /c #{command} & sleep 2 & waitfor /s %computername% /si chefclientinstalldone\"
199
+
200
+ @if ERRORLEVEL 1 (
201
+ @echo ERROR: Failed to create Chef Client installation scheduled task with status code !ERRORLEVEL! > "&2"
202
+ ) else (
203
+ @echo Successfully created scheduled task to install Chef Client.
204
+ @schtasks /run /tn chefclientbootstraptask
205
+ @if ERRORLEVEL 1 (
206
+ @echo ERROR: Failed to execut Chef Client installation scheduled task with status code !ERRORLEVEL!. > "&2"
207
+ ) else (
208
+ @echo Successfully started Chef Client installation scheduled task.
209
+ @echo Waiting for installation to complete -- this may take a few minutes...
210
+ waitfor chefclientinstalldone /t 600
211
+ if ERRORLEVEL 1 (
212
+ @echo ERROR: Timed out waiting for Chef Client package to install
213
+ ) else (
214
+ @echo Finished waiting for Chef Client package to install.
215
+ )
216
+ @schtasks /delete /f /tn chefclientbootstraptask > NUL
217
+ )
218
+ )
219
+ ) else (
220
+ @echo Successfully installed Chef Client package.
221
+ )
222
+ EOH
223
+ end
174
224
  end
175
225
  end
176
226
  end
@@ -253,8 +253,9 @@ class Chef
253
253
  def check_for_errors!(exit_codes)
254
254
 
255
255
  exit_codes.each do |host, value|
256
+ Chef::Log.debug("Exit code found: #{value}")
256
257
  unless success_return_codes.include? value.to_i
257
- @exit_code = 1
258
+ @exit_code = value.to_i
258
259
  ui.error "Failed to execute command on #{host} return code #{value}"
259
260
  end
260
261
  end
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Windows
3
- VERSION = "0.8.0.rc.0"
3
+ VERSION = "0.8.0.rc.1"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
@@ -97,6 +97,22 @@ describe Chef::Knife::Winrm do
97
97
  expect(exit_code).to be_zero
98
98
  end
99
99
 
100
+ it "should exit the process with exact exit status if the command fails and returns config is set to 0" do
101
+ command_status = 510
102
+ @winrm.config[:returns] = "0"
103
+ Chef::Config[:knife][:returns] = [0]
104
+ allow(@winrm).to receive(:winrm_command).and_return(command_status)
105
+ session_mock = EventMachine::WinRM::Session.new
106
+ allow(EventMachine::WinRM::Session).to receive(:new).and_return(session_mock)
107
+ allow(session_mock).to receive(:exit_codes).and_return({"thishost" => command_status})
108
+ begin
109
+ @winrm.run
110
+ expect(0).to eq(510)
111
+ rescue Exception => e
112
+ expect(e.status).to eq(command_status)
113
+ end
114
+ end
115
+
100
116
  it "should exit the process with non-zero status if the command fails and returns config is set to 0" do
101
117
  command_status = 1
102
118
  @winrm.config[:returns] = "0,53"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-windows
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0.rc.0
4
+ version: 0.8.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Chisamore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-19 00:00:00.000000000 Z
11
+ date: 2014-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: winrm-s