knife-windows 0.8.6 → 1.0.0.rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +17 -3
  4. data/CHANGELOG.md +25 -6
  5. data/DOC_CHANGES.md +323 -0
  6. data/Gemfile +2 -1
  7. data/README.md +160 -29
  8. data/RELEASE_NOTES.md +59 -6
  9. data/appveyor.yml +42 -0
  10. data/ci.gemfile +15 -0
  11. data/knife-windows.gemspec +4 -2
  12. data/lib/chef/knife/bootstrap/windows-chef-client-msi.erb +35 -21
  13. data/lib/chef/knife/bootstrap_windows_base.rb +155 -31
  14. data/lib/chef/knife/bootstrap_windows_ssh.rb +1 -1
  15. data/lib/chef/knife/bootstrap_windows_winrm.rb +17 -10
  16. data/lib/chef/knife/core/windows_bootstrap_context.rb +67 -16
  17. data/lib/chef/knife/windows_cert_generate.rb +155 -0
  18. data/lib/chef/knife/windows_cert_install.rb +62 -0
  19. data/lib/chef/knife/windows_helper.rb +3 -1
  20. data/lib/chef/knife/windows_listener_create.rb +100 -0
  21. data/lib/chef/knife/winrm.rb +84 -208
  22. data/lib/chef/knife/winrm_base.rb +36 -10
  23. data/lib/chef/knife/winrm_knife_base.rb +201 -0
  24. data/lib/chef/knife/winrm_session.rb +72 -0
  25. data/lib/chef/knife/winrm_shared_options.rb +47 -0
  26. data/lib/chef/knife/wsman_endpoint.rb +44 -0
  27. data/lib/chef/knife/wsman_test.rb +96 -0
  28. data/lib/knife-windows/path_helper.rb +77 -0
  29. data/lib/knife-windows/version.rb +1 -1
  30. data/spec/functional/bootstrap_download_spec.rb +41 -23
  31. data/spec/spec_helper.rb +11 -1
  32. data/spec/unit/knife/bootstrap_template_spec.rb +27 -27
  33. data/spec/unit/knife/bootstrap_windows_winrm_spec.rb +67 -23
  34. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +47 -0
  35. data/spec/unit/knife/windows_cert_generate_spec.rb +90 -0
  36. data/spec/unit/knife/windows_cert_install_spec.rb +35 -0
  37. data/spec/unit/knife/windows_listener_create_spec.rb +61 -0
  38. data/spec/unit/knife/winrm_session_spec.rb +47 -0
  39. data/spec/unit/knife/winrm_spec.rb +222 -56
  40. data/spec/unit/knife/wsman_test_spec.rb +176 -0
  41. metadata +51 -20
@@ -0,0 +1,176 @@
1
+ #
2
+ # Author:: Steven Murawski (<smurawski@chef.io>)
3
+ # Copyright:: Copyright (c) 2015 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Chef::Knife::WsmanTest do
22
+ before(:all) do
23
+ Chef::Config.reset
24
+ end
25
+
26
+
27
+ context 'when testing the WSMAN endpoint' do
28
+ let(:wsman_tester) { Chef::Knife::WsmanTest.new(['-m', 'localhost']) }
29
+ let(:http_client_mock) {HTTPClient.new}
30
+
31
+ before(:each) do
32
+ wsman_tester.config[:verbosity] = 0
33
+ allow(HTTPClient).to receive(:new).and_return(http_client_mock)
34
+ end
35
+
36
+ context 'and the service does not respond' do
37
+ error_message = 'A connection attempt failed because the connected party did not properly respond after a period of time.'
38
+
39
+ before(:each) do
40
+ allow(HTTPClient).to receive(:new).and_return(http_client_mock)
41
+ allow(http_client_mock).to receive(:post).and_raise(Exception.new(error_message))
42
+ end
43
+
44
+ it 'exits with a status code of 1' do
45
+ expect(wsman_tester).to receive(:exit).with(1)
46
+ wsman_tester.run
47
+ end
48
+
49
+ it 'writes a warning message for each node it fails to connect to' do
50
+ expect(wsman_tester.ui).to receive(:warn)
51
+ expect(wsman_tester).to receive(:exit).with(1)
52
+ wsman_tester.run
53
+ end
54
+
55
+ it 'writes an error message if it fails to connect to any nodes' do
56
+ expect(wsman_tester.ui).to receive(:error)
57
+ expect(wsman_tester).to receive(:exit).with(1)
58
+ wsman_tester.run
59
+ end
60
+ end
61
+
62
+ context 'and the service responds' do
63
+ context 'successfully' do
64
+ it 'writes a message about a successful connection' do
65
+ response_body = '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header/><s:Body><wsmid:IdentifyResponse xmlns:wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd"><wsmid:ProtocolVersion>http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd</wsmid:ProtocolVersion><wsmid:ProductVendor>Microsoft Corporation</wsmid:ProductVendor><wsmid:ProductVersion>OS: 0.0.0 SP: 0.0 Stack: 2.0</wsmid:ProductVersion></wsmid:IdentifyResponse></s:Body></s:Envelope>'
66
+ http_response_mock = HTTP::Message.new_response(response_body)
67
+ allow(http_client_mock).to receive(:post).and_return(http_response_mock)
68
+ expect(wsman_tester.ui).to receive(:msg)
69
+ wsman_tester.run
70
+ end
71
+ end
72
+
73
+ context 'with an invalid body' do
74
+ it 'warns for a failed connection and exit with a status of 1' do
75
+ response_body = 'I am invalid'
76
+ http_response_mock = HTTP::Message.new_response(response_body)
77
+ allow(http_client_mock).to receive(:post).and_return(http_response_mock)
78
+ expect(wsman_tester.ui).to receive(:warn)
79
+ expect(wsman_tester.ui).to receive(:error)
80
+ expect(wsman_tester).to receive(:exit).with(1)
81
+ wsman_tester.run
82
+ end
83
+ end
84
+
85
+ context 'with a non-200 code' do
86
+ it 'warns for a failed connection and exits with a status of 1' do
87
+ http_response_mock = HTTP::Message.new_response('')
88
+ http_response_mock.status = 404
89
+ allow(http_client_mock).to receive(:post).and_return(http_response_mock)
90
+ expect(wsman_tester.ui).to receive(:warn)
91
+ expect(wsman_tester.ui).to receive(:error)
92
+ expect(wsman_tester).to receive(:exit).with(1)
93
+ wsman_tester.run
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ context 'when testing the WSMAN endpoint with verbose output' do
100
+ let(:wsman_tester_verbose) { Chef::Knife::WsmanTest.new(['-m', 'localhost']) }
101
+ let(:http_client_mock_verbose) {HTTPClient.new}
102
+
103
+ before(:each) do
104
+ allow(HTTPClient).to receive(:new).and_return(http_client_mock_verbose)
105
+ wsman_tester_verbose.config[:verbosity] = 1
106
+ end
107
+
108
+ context 'and the service does not respond' do
109
+ it 'returns an object with an error message' do
110
+ error_message = 'A connection attempt failed because the connected party did not properly respond after a period of time.'
111
+ allow(http_client_mock_verbose).to receive(:post).and_raise(Exception.new(error_message))
112
+ expect(wsman_tester_verbose).to receive(:output).with(duck_type(:error_message))
113
+ expect(wsman_tester_verbose).to receive(:exit).with(1)
114
+ wsman_tester_verbose.run
115
+ end
116
+ end
117
+
118
+ context 'and the target node is Windows Server 2008 R2' do
119
+ before(:each) do
120
+ ws2008r2_response_body = '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header/><s:Body><wsmid:IdentifyResponse xmlns:wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd"><wsmid:ProtocolVersion>http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd</wsmid:ProtocolVersion><wsmid:ProductVendor>Microsoft Corporation</wsmid:ProductVendor><wsmid:ProductVersion>OS: 0.0.0 SP: 0.0 Stack: 2.0</wsmid:ProductVersion></wsmid:IdentifyResponse></s:Body></s:Envelope>'
121
+ http_response_mock = HTTP::Message.new_response(ws2008r2_response_body)
122
+ allow(http_client_mock_verbose).to receive(:post).and_return(http_response_mock)
123
+ end
124
+
125
+ it 'identifies the stack of the product version as 2.0 ' do
126
+ expect(wsman_tester_verbose).to receive(:output) do |output|
127
+ expect(output.product_version).to eq 'OS: 0.0.0 SP: 0.0 Stack: 2.0'
128
+ end
129
+ wsman_tester_verbose.run
130
+ end
131
+
132
+ it 'identifies the protocol version as the current DMTF standard' do
133
+ expect(wsman_tester_verbose).to receive(:output) do |output|
134
+ expect(output.protocol_version).to eq 'http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd'
135
+ end
136
+ wsman_tester_verbose.run
137
+ end
138
+
139
+ it 'identifies the vendor as the Microsoft Corporation' do
140
+ expect(wsman_tester_verbose).to receive(:output) do |output|
141
+ expect(output.product_vendor).to eq 'Microsoft Corporation'
142
+ end
143
+ wsman_tester_verbose.run
144
+ end
145
+ end
146
+
147
+ context 'and the target node is Windows Server 2012 R2' do
148
+ before(:each) do
149
+ ws2012_response_body = '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header/><s:Body><wsmid:IdentifyResponse xmlns:wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd"><wsmid:ProtocolVersion>http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd</wsmid:ProtocolVersion><wsmid:ProductVendor>Microsoft Corporation</wsmid:ProductVendor><wsmid:ProductVersion>OS: 0.0.0 SP: 0.0 Stack: 3.0</wsmid:ProductVersion></wsmid:IdentifyResponse></s:Body></s:Envelope>'
150
+ http_response_mock = HTTP::Message.new_response(ws2012_response_body)
151
+ allow(http_client_mock_verbose).to receive(:post).and_return(http_response_mock)
152
+ end
153
+
154
+ it 'identifies the stack of the product version as 3.0 ' do
155
+ expect(wsman_tester_verbose).to receive(:output) do |output|
156
+ expect(output.product_version).to eq 'OS: 0.0.0 SP: 0.0 Stack: 3.0'
157
+ end
158
+ wsman_tester_verbose.run
159
+ end
160
+
161
+ it 'identifies the protocol version as the current DMTF standard' do
162
+ expect(wsman_tester_verbose).to receive(:output) do |output|
163
+ expect(output.protocol_version).to eq 'http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd'
164
+ end
165
+ wsman_tester_verbose.run
166
+ end
167
+
168
+ it 'identifies the vendor as the Microsoft Corporation' do
169
+ expect(wsman_tester_verbose).to receive(:output) do |output|
170
+ expect(output.product_vendor).to eq 'Microsoft Corporation'
171
+ end
172
+ wsman_tester_verbose.run
173
+ end
174
+ end
175
+ end
176
+ end
metadata CHANGED
@@ -1,55 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-windows
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 1.0.0.rc.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Chisamore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-05 00:00:00.000000000 Z
11
+ date: 2015-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: winrm
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: winrm-s
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ~>
18
32
  - !ruby/object:Gem::Version
19
- version: 0.3.1
33
+ version: 0.3.0.dev.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ~>
25
39
  - !ruby/object:Gem::Version
26
- version: 0.3.1
40
+ version: 0.3.0.dev.0
27
41
  - !ruby/object:Gem::Dependency
28
- name: em-winrm
42
+ name: nokogiri
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - '>='
32
46
  - !ruby/object:Gem::Version
33
- version: '0.7'
47
+ version: '0'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - '>='
39
53
  - !ruby/object:Gem::Version
40
- version: '0.7'
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: pry
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - '>='
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - '>='
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  description: Plugin that adds functionality to Chef's Knife CLI for configuring/interacting
@@ -60,15 +74,18 @@ executables: []
60
74
  extensions: []
61
75
  extra_rdoc_files: []
62
76
  files:
63
- - ".gitignore"
64
- - ".rspec"
65
- - ".travis.yml"
77
+ - .gitignore
78
+ - .rspec
79
+ - .travis.yml
66
80
  - CHANGELOG.md
81
+ - DOC_CHANGES.md
67
82
  - Gemfile
68
83
  - LICENSE
69
84
  - README.md
70
85
  - RELEASE_NOTES.md
71
86
  - Rakefile
87
+ - appveyor.yml
88
+ - ci.gemfile
72
89
  - features/knife_help.feature
73
90
  - features/support/env.rb
74
91
  - knife-windows.gemspec
@@ -77,9 +94,17 @@ files:
77
94
  - lib/chef/knife/bootstrap_windows_ssh.rb
78
95
  - lib/chef/knife/bootstrap_windows_winrm.rb
79
96
  - lib/chef/knife/core/windows_bootstrap_context.rb
97
+ - lib/chef/knife/windows_cert_generate.rb
98
+ - lib/chef/knife/windows_cert_install.rb
80
99
  - lib/chef/knife/windows_helper.rb
100
+ - lib/chef/knife/windows_listener_create.rb
81
101
  - lib/chef/knife/winrm.rb
82
102
  - lib/chef/knife/winrm_base.rb
103
+ - lib/chef/knife/winrm_knife_base.rb
104
+ - lib/chef/knife/winrm_session.rb
105
+ - lib/chef/knife/winrm_shared_options.rb
106
+ - lib/chef/knife/wsman_endpoint.rb
107
+ - lib/chef/knife/wsman_test.rb
83
108
  - lib/knife-windows/path_helper.rb
84
109
  - lib/knife-windows/version.rb
85
110
  - spec/functional/bootstrap_download_spec.rb
@@ -87,7 +112,12 @@ files:
87
112
  - spec/unit/knife/bootstrap_template_spec.rb
88
113
  - spec/unit/knife/bootstrap_windows_winrm_spec.rb
89
114
  - spec/unit/knife/core/windows_bootstrap_context_spec.rb
115
+ - spec/unit/knife/windows_cert_generate_spec.rb
116
+ - spec/unit/knife/windows_cert_install_spec.rb
117
+ - spec/unit/knife/windows_listener_create_spec.rb
118
+ - spec/unit/knife/winrm_session_spec.rb
90
119
  - spec/unit/knife/winrm_spec.rb
120
+ - spec/unit/knife/wsman_test_spec.rb
91
121
  homepage: https://github.com/opscode/knife-windows
92
122
  licenses:
93
123
  - Apache-2.0
@@ -98,19 +128,20 @@ require_paths:
98
128
  - lib
99
129
  required_ruby_version: !ruby/object:Gem::Requirement
100
130
  requirements:
101
- - - ">="
131
+ - - '>='
102
132
  - !ruby/object:Gem::Version
103
133
  version: 1.9.1
104
134
  required_rubygems_version: !ruby/object:Gem::Requirement
105
135
  requirements:
106
- - - ">="
136
+ - - '>'
107
137
  - !ruby/object:Gem::Version
108
- version: '0'
138
+ version: 1.3.1
109
139
  requirements: []
110
140
  rubyforge_project:
111
- rubygems_version: 2.2.3
141
+ rubygems_version: 2.0.14
112
142
  signing_key:
113
143
  specification_version: 4
114
144
  summary: Plugin that adds functionality to Chef's Knife CLI for configuring/interacting
115
145
  with nodes running Microsoft Windows
116
146
  test_files: []
147
+ has_rdoc: