winrm 2.2.1 → 2.2.2

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5aee7bd9437669d90fa2e9a928624cd459d5c2ba
4
- data.tar.gz: f29dc28620dca84b05b1ca1f65ac3bdd1f98a5da
3
+ metadata.gz: aea153848b3f833150520c7ccd2ff1ec940f0238
4
+ data.tar.gz: 0c4ab4320a28d135423de6ee6ea39a8e428cc069
5
5
  SHA512:
6
- metadata.gz: 5ba7e3c9917afee28df831efa38cd4234de1749ff237292eb13682a806bc71b6e8e83c3ed25c4aa1cd32304ffbc68a60bf4eb59937f67ccf779ee125e6851e56
7
- data.tar.gz: 618c9e4000b0d4bb0754991863ce5845e3e9df4ee77cdf1fa58ca6c6b76ee9b4c96e609184a97f837858cbc1ded51f148b219563beb01caadd70c5643bc10d14
6
+ metadata.gz: 97ea0581ac573fb208c5d2b43d3a71b926c2b65a05198a157e03c1538cf2169b8ff09ec0134188d0ae4703e2c4ae462a90e6409abf3eb98ee6292c48eef2bd9c
7
+ data.tar.gz: acb321d609e66cb79de65d900e6a7b62f1b3962d5975f10b57188dd2d2788a26667a2cd69bc06278d8972b825b54909bd2fd9fac75e19eae15c4abaf60cbccae
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- # encoding: UTF-8
2
- source 'https://rubygems.org'
3
- gemspec
1
+ # encoding: UTF-8
2
+ source 'https://rubygems.org'
3
+ gemspec
@@ -1,5 +1,9 @@
1
1
  # WinRM Gem Changelog
2
2
 
3
+ # 2.2.2
4
+ - Update PSRP buffer size
5
+ - Close and cleanup should retry on error and never raise net errors
6
+
3
7
  # 2.2.1
4
8
  - Ignore error 2150858843 during shell closing
5
9
 
@@ -1,91 +1,91 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- require 'securerandom'
18
-
19
- module WinRM
20
- # WinRM connection options, provides defaults and validation.
21
- class ConnectionOpts < Hash
22
- DEFAULT_OPERATION_TIMEOUT = 60
23
- DEFAULT_RECEIVE_TIMEOUT = DEFAULT_OPERATION_TIMEOUT + 10
24
- DEFAULT_MAX_ENV_SIZE = 153600
25
- DEFAULT_LOCALE = 'en-US'.freeze
26
- DEFAULT_RETRY_DELAY = 10
27
- DEFAULT_RETRY_LIMIT = 3
28
-
29
- class << self
30
- def create_with_defaults(overrides)
31
- config = default.merge(overrides)
32
- config = ensure_receive_timeout_is_greater_than_operation_timeout(config)
33
- config.validate
34
- config
35
- end
36
-
37
- private
38
-
39
- def ensure_receive_timeout_is_greater_than_operation_timeout(config)
40
- if config[:receive_timeout] < config[:operation_timeout]
41
- config[:receive_timeout] = config[:operation_timeout] + 10
42
- end
43
- config
44
- end
45
-
46
- def default
47
- config = ConnectionOpts.new
48
- config[:session_id] = SecureRandom.uuid.to_s.upcase
49
- config[:transport] = :negotiate
50
- config[:locale] = DEFAULT_LOCALE
51
- config[:max_envelope_size] = DEFAULT_MAX_ENV_SIZE
52
- config[:operation_timeout] = DEFAULT_OPERATION_TIMEOUT
53
- config[:receive_timeout] = DEFAULT_RECEIVE_TIMEOUT
54
- config[:retry_delay] = DEFAULT_RETRY_DELAY
55
- config[:retry_limit] = DEFAULT_RETRY_LIMIT
56
- config
57
- end
58
- end
59
-
60
- def validate
61
- validate_required_fields
62
- validate_data_types
63
- end
64
-
65
- private
66
-
67
- def validate_required_fields
68
- raise 'endpoint is a required option' unless self[:endpoint]
69
- if self[:client_cert]
70
- raise 'path to client key is required' unless self[:client_key]
71
- else
72
- raise 'user is a required option' unless self[:user]
73
- raise 'password is a required option' unless self[:password]
74
- end
75
- end
76
-
77
- def validate_data_types
78
- validate_integer(:retry_limit)
79
- validate_integer(:retry_delay)
80
- validate_integer(:max_envelope_size)
81
- validate_integer(:operation_timeout)
82
- validate_integer(:receive_timeout, self[:operation_timeout])
83
- end
84
-
85
- def validate_integer(key, min = 0)
86
- value = self[key]
87
- raise "#{key} must be a Integer" unless value && value.is_a?(Integer)
88
- raise "#{key} must be greater than #{min}" unless value > min
89
- end
90
- end
91
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'securerandom'
18
+
19
+ module WinRM
20
+ # WinRM connection options, provides defaults and validation.
21
+ class ConnectionOpts < Hash
22
+ DEFAULT_OPERATION_TIMEOUT = 60
23
+ DEFAULT_RECEIVE_TIMEOUT = DEFAULT_OPERATION_TIMEOUT + 10
24
+ DEFAULT_MAX_ENV_SIZE = 153600
25
+ DEFAULT_LOCALE = 'en-US'.freeze
26
+ DEFAULT_RETRY_DELAY = 10
27
+ DEFAULT_RETRY_LIMIT = 3
28
+
29
+ class << self
30
+ def create_with_defaults(overrides)
31
+ config = default.merge(overrides)
32
+ config = ensure_receive_timeout_is_greater_than_operation_timeout(config)
33
+ config.validate
34
+ config
35
+ end
36
+
37
+ private
38
+
39
+ def ensure_receive_timeout_is_greater_than_operation_timeout(config)
40
+ if config[:receive_timeout] < config[:operation_timeout]
41
+ config[:receive_timeout] = config[:operation_timeout] + 10
42
+ end
43
+ config
44
+ end
45
+
46
+ def default
47
+ config = ConnectionOpts.new
48
+ config[:session_id] = SecureRandom.uuid.to_s.upcase
49
+ config[:transport] = :negotiate
50
+ config[:locale] = DEFAULT_LOCALE
51
+ config[:max_envelope_size] = DEFAULT_MAX_ENV_SIZE
52
+ config[:operation_timeout] = DEFAULT_OPERATION_TIMEOUT
53
+ config[:receive_timeout] = DEFAULT_RECEIVE_TIMEOUT
54
+ config[:retry_delay] = DEFAULT_RETRY_DELAY
55
+ config[:retry_limit] = DEFAULT_RETRY_LIMIT
56
+ config
57
+ end
58
+ end
59
+
60
+ def validate
61
+ validate_required_fields
62
+ validate_data_types
63
+ end
64
+
65
+ private
66
+
67
+ def validate_required_fields
68
+ raise 'endpoint is a required option' unless self[:endpoint]
69
+ if self[:client_cert]
70
+ raise 'path to client key is required' unless self[:client_key]
71
+ else
72
+ raise 'user is a required option' unless self[:user]
73
+ raise 'password is a required option' unless self[:password]
74
+ end
75
+ end
76
+
77
+ def validate_data_types
78
+ validate_integer(:retry_limit)
79
+ validate_integer(:retry_delay)
80
+ validate_integer(:max_envelope_size)
81
+ validate_integer(:operation_timeout)
82
+ validate_integer(:receive_timeout, self[:operation_timeout])
83
+ end
84
+
85
+ def validate_integer(key, min = 0)
86
+ value = self[key]
87
+ raise "#{key} must be a Integer" unless value && value.is_a?(Integer)
88
+ raise "#{key} must be greater than #{min}" unless value > min
89
+ end
90
+ end
91
+ end
@@ -1,76 +1,85 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright 2010 Dan Wanek <dan.wanek@gmail.com>
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- module WinRM
18
- # WinRM base class for errors
19
- class WinRMError < StandardError; end
20
-
21
- # Authorization Error
22
- class WinRMAuthorizationError < WinRMError; end
23
-
24
- # Shell creation error
25
- class InvalidShellError < WinRMError; end
26
-
27
- # Exitcode error
28
- class InvalidExitCode < WinRMError; end
29
-
30
- # Shell creation error
31
- class InvalidTransportError < WinRMError
32
- attr_reader :invalid_transport
33
-
34
- def initialize(invalid_transport, valid_transports)
35
- @invalid_transport = invalid_transport
36
- super(
37
- "Invalid transport '#{invalid_transport}' specified" \
38
- ", expected: #{valid_transports.join(', ')}."
39
- )
40
- end
41
- end
42
-
43
- # A Fault returned in the SOAP response. The XML node is a WSManFault
44
- class WinRMWSManFault < WinRMError
45
- attr_reader :fault_code
46
- attr_reader :fault_description
47
-
48
- def initialize(fault_description, fault_code)
49
- @fault_description = fault_description
50
- @fault_code = fault_code
51
- super("[WSMAN ERROR CODE: #{fault_code}]: #{fault_description}")
52
- end
53
- end
54
-
55
- # A Fault returned in the SOAP response. The XML node is a MSFT_WmiError
56
- class WinRMWMIError < WinRMError
57
- attr_reader :error_code
58
- attr_reader :error
59
-
60
- def initialize(error, error_code)
61
- @error = error
62
- @error_code = error_code
63
- super("[WMI ERROR CODE: #{error_code}]: #{error}")
64
- end
65
- end
66
-
67
- # non-200 response without a SOAP fault
68
- class WinRMHTTPTransportError < WinRMError
69
- attr_reader :status_code
70
-
71
- def initialize(msg, status_code = nil)
72
- @status_code = status_code
73
- super(msg + " (#{status_code}).")
74
- end
75
- end
76
- end
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright 2010 Dan Wanek <dan.wanek@gmail.com>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ module WinRM
18
+ NETWORK_EXCEPTIONS = lambda do
19
+ [
20
+ Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED, Errno::ETIMEDOUT,
21
+ Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH, ::WinRM::WinRMWSManFault,
22
+ ::WinRM::WinRMHTTPTransportError, ::WinRM::WinRMAuthorizationError,
23
+ HTTPClient::KeepAliveDisconnected, HTTPClient::ConnectTimeoutError
24
+ ].freeze
25
+ end
26
+
27
+ # WinRM base class for errors
28
+ class WinRMError < StandardError; end
29
+
30
+ # Authorization Error
31
+ class WinRMAuthorizationError < WinRMError; end
32
+
33
+ # Shell creation error
34
+ class InvalidShellError < WinRMError; end
35
+
36
+ # Exitcode error
37
+ class InvalidExitCode < WinRMError; end
38
+
39
+ # Shell creation error
40
+ class InvalidTransportError < WinRMError
41
+ attr_reader :invalid_transport
42
+
43
+ def initialize(invalid_transport, valid_transports)
44
+ @invalid_transport = invalid_transport
45
+ super(
46
+ "Invalid transport '#{invalid_transport}' specified" \
47
+ ", expected: #{valid_transports.join(', ')}."
48
+ )
49
+ end
50
+ end
51
+
52
+ # A Fault returned in the SOAP response. The XML node is a WSManFault
53
+ class WinRMWSManFault < WinRMError
54
+ attr_reader :fault_code
55
+ attr_reader :fault_description
56
+
57
+ def initialize(fault_description, fault_code)
58
+ @fault_description = fault_description
59
+ @fault_code = fault_code
60
+ super("[WSMAN ERROR CODE: #{fault_code}]: #{fault_description}")
61
+ end
62
+ end
63
+
64
+ # A Fault returned in the SOAP response. The XML node is a MSFT_WmiError
65
+ class WinRMWMIError < WinRMError
66
+ attr_reader :error_code
67
+ attr_reader :error
68
+
69
+ def initialize(error, error_code)
70
+ @error = error
71
+ @error_code = error_code
72
+ super("[WMI ERROR CODE: #{error_code}]: #{error}")
73
+ end
74
+ end
75
+
76
+ # non-200 response without a SOAP fault
77
+ class WinRMHTTPTransportError < WinRMError
78
+ attr_reader :status_code
79
+
80
+ def initialize(msg, status_code = nil)
81
+ @status_code = status_code
82
+ super(msg + " (#{status_code}).")
83
+ end
84
+ end
85
+ end
@@ -1,224 +1,224 @@
1
- <Obj RefId="0">
2
- <MS>
3
- <I32 N="MinRunspaces">1</I32>
4
- <I32 N="MaxRunspaces">1</I32>
5
- <Obj N="PSThreadOptions" RefId="1">
6
- <TN RefId="0">
7
- <T>System.Management.Automation.Runspaces.PSThreadOptions</T>
8
- <T>System.Enum</T>
9
- <T>System.ValueType</T>
10
- <T>System.Object</T>
11
- </TN>
12
- <ToString>Default</ToString>
13
- <I32>0</I32>
14
- </Obj>
15
- <Obj N="ApartmentState" RefId="2">
16
- <TN RefId="1">
17
- <T>System.Threading.ApartmentState</T>
18
- <T>System.Enum</T>
19
- <T>System.ValueType</T>
20
- <T>System.Object</T>
21
- </TN>
22
- <ToString>Unknown</ToString>
23
- <I32>2</I32>
24
- </Obj>
25
- <Obj N="ApplicationArguments" RefId="3">
26
- <TN RefId="2">
27
- <T>System.Management.Automation.PSPrimitiveDictionary</T>
28
- <T>System.Collections.Hashtable</T>
29
- <T>System.Object</T>
30
- </TN>
31
- <DCT>
32
- <En>
33
- <S N="Key">PSVersionTable</S>
34
- <Obj N="Value" RefId="4">
35
- <TNRef RefId="2" />
36
- <DCT>
37
- <En>
38
- <S N="Key">PSVersion</S>
39
- <Version N="Value">5.0.11082.1000</Version>
40
- </En>
41
- <En>
42
- <S N="Key">PSCompatibleVersions</S>
43
- <Obj N="Value" RefId="5">
44
- <TN RefId="3">
45
- <T>System.Version[]</T>
46
- <T>System.Array</T>
47
- <T>System.Object</T>
48
- </TN>
49
- <LST>
50
- <Version>1.0</Version>
51
- <Version>2.0</Version>
52
- <Version>3.0</Version>
53
- <Version>4.0</Version>
54
- <Version>5.0.11082.1000</Version>
55
- </LST>
56
- </Obj>
57
- </En>
58
- <En>
59
- <S N="Key">CLRVersion</S>
60
- <Version N="Value">4.0.30319.42000</Version>
61
- </En>
62
- <En>
63
- <S N="Key">BuildVersion</S>
64
- <Version N="Value">10.0.11082.1000</Version>
65
- </En>
66
- <En>
67
- <S N="Key">WSManStackVersion</S>
68
- <Version N="Value">3.0</Version>
69
- </En>
70
- <En>
71
- <S N="Key">PSRemotingProtocolVersion</S>
72
- <Version N="Value">2.3</Version>
73
- </En>
74
- <En>
75
- <S N="Key">SerializationVersion</S>
76
- <Version N="Value">1.1.0.1</Version>
77
- </En>
78
- </DCT>
79
- </Obj>
80
- </En>
81
- </DCT>
82
- </Obj>
83
- <Obj N="HostInfo" RefId="6">
84
- <MS>
85
- <Obj N="_hostDefaultData" RefId="7">
86
- <MS>
87
- <Obj N="data" RefId="8">
88
- <TN RefId="4">
89
- <T>System.Collections.Hashtable</T>
90
- <T>System.Object</T>
91
- </TN>
92
- <DCT>
93
- <En>
94
- <I32 N="Key">9</I32>
95
- <Obj N="Value" RefId="9">
96
- <MS>
97
- <S N="T">System.String</S>
98
- <S N="V">C:\dev\kitchen-vagrant</S>
99
- </MS>
100
- </Obj>
101
- </En>
102
- <En>
103
- <I32 N="Key">8</I32>
104
- <Obj N="Value" RefId="10">
105
- <MS>
106
- <S N="T">System.Management.Automation.Host.Size</S>
107
- <Obj N="V" RefId="11">
108
- <MS>
109
- <I32 N="width">199</I32>
110
- <I32 N="height">52</I32>
111
- </MS>
112
- </Obj>
113
- </MS>
114
- </Obj>
115
- </En>
116
- <En>
117
- <I32 N="Key">7</I32>
118
- <Obj N="Value" RefId="12">
119
- <MS>
120
- <S N="T">System.Management.Automation.Host.Size</S>
121
- <Obj N="V" RefId="13">
122
- <MS>
123
- <I32 N="width">80</I32>
124
- <I32 N="height">52</I32>
125
- </MS>
126
- </Obj>
127
- </MS>
128
- </Obj>
129
- </En>
130
- <En>
131
- <I32 N="Key">6</I32>
132
- <Obj N="Value" RefId="14">
133
- <MS>
134
- <S N="T">System.Management.Automation.Host.Size</S>
135
- <Obj N="V" RefId="15">
136
- <MS>
137
- <I32 N="width">80</I32>
138
- <I32 N="height">25</I32>
139
- </MS>
140
- </Obj>
141
- </MS>
142
- </Obj>
143
- </En>
144
- <En>
145
- <I32 N="Key">5</I32>
146
- <Obj N="Value" RefId="16">
147
- <MS>
148
- <S N="T">System.Management.Automation.Host.Size</S>
149
- <Obj N="V" RefId="17">
150
- <MS>
151
- <I32 N="width">80</I32>
152
- <I32 N="height">9999</I32>
153
- </MS>
154
- </Obj>
155
- </MS>
156
- </Obj>
157
- </En>
158
- <En>
159
- <I32 N="Key">4</I32>
160
- <Obj N="Value" RefId="18">
161
- <MS>
162
- <S N="T">System.Int32</S>
163
- <I32 N="V">25</I32>
164
- </MS>
165
- </Obj>
166
- </En>
167
- <En>
168
- <I32 N="Key">3</I32>
169
- <Obj N="Value" RefId="19">
170
- <MS>
171
- <S N="T">System.Management.Automation.Host.Coordinates</S>
172
- <Obj N="V" RefId="20">
173
- <MS>
174
- <I32 N="x">0</I32>
175
- <I32 N="y">9974</I32>
176
- </MS>
177
- </Obj>
178
- </MS>
179
- </Obj>
180
- </En>
181
- <En>
182
- <I32 N="Key">2</I32>
183
- <Obj N="Value" RefId="21">
184
- <MS>
185
- <S N="T">System.Management.Automation.Host.Coordinates</S>
186
- <Obj N="V" RefId="22">
187
- <MS>
188
- <I32 N="x">0</I32>
189
- <I32 N="y">9998</I32>
190
- </MS>
191
- </Obj>
192
- </MS>
193
- </Obj>
194
- </En>
195
- <En>
196
- <I32 N="Key">1</I32>
197
- <Obj N="Value" RefId="23">
198
- <MS>
199
- <S N="T">System.ConsoleColor</S>
200
- <I32 N="V">0</I32>
201
- </MS>
202
- </Obj>
203
- </En>
204
- <En>
205
- <I32 N="Key">0</I32>
206
- <Obj N="Value" RefId="24">
207
- <MS>
208
- <S N="T">System.ConsoleColor</S>
209
- <I32 N="V">7</I32>
210
- </MS>
211
- </Obj>
212
- </En>
213
- </DCT>
214
- </Obj>
215
- </MS>
216
- </Obj>
217
- <B N="_isHostNull">false</B>
218
- <B N="_isHostUINull">false</B>
219
- <B N="_isHostRawUINull">false</B>
220
- <B N="_useRunspaceHost">false</B>
221
- </MS>
222
- </Obj>
223
- </MS>
224
- </Obj>
1
+ <Obj RefId="0">
2
+ <MS>
3
+ <I32 N="MinRunspaces">1</I32>
4
+ <I32 N="MaxRunspaces">1</I32>
5
+ <Obj N="PSThreadOptions" RefId="1">
6
+ <TN RefId="0">
7
+ <T>System.Management.Automation.Runspaces.PSThreadOptions</T>
8
+ <T>System.Enum</T>
9
+ <T>System.ValueType</T>
10
+ <T>System.Object</T>
11
+ </TN>
12
+ <ToString>Default</ToString>
13
+ <I32>0</I32>
14
+ </Obj>
15
+ <Obj N="ApartmentState" RefId="2">
16
+ <TN RefId="1">
17
+ <T>System.Threading.ApartmentState</T>
18
+ <T>System.Enum</T>
19
+ <T>System.ValueType</T>
20
+ <T>System.Object</T>
21
+ </TN>
22
+ <ToString>Unknown</ToString>
23
+ <I32>2</I32>
24
+ </Obj>
25
+ <Obj N="ApplicationArguments" RefId="3">
26
+ <TN RefId="2">
27
+ <T>System.Management.Automation.PSPrimitiveDictionary</T>
28
+ <T>System.Collections.Hashtable</T>
29
+ <T>System.Object</T>
30
+ </TN>
31
+ <DCT>
32
+ <En>
33
+ <S N="Key">PSVersionTable</S>
34
+ <Obj N="Value" RefId="4">
35
+ <TNRef RefId="2" />
36
+ <DCT>
37
+ <En>
38
+ <S N="Key">PSVersion</S>
39
+ <Version N="Value">5.0.11082.1000</Version>
40
+ </En>
41
+ <En>
42
+ <S N="Key">PSCompatibleVersions</S>
43
+ <Obj N="Value" RefId="5">
44
+ <TN RefId="3">
45
+ <T>System.Version[]</T>
46
+ <T>System.Array</T>
47
+ <T>System.Object</T>
48
+ </TN>
49
+ <LST>
50
+ <Version>1.0</Version>
51
+ <Version>2.0</Version>
52
+ <Version>3.0</Version>
53
+ <Version>4.0</Version>
54
+ <Version>5.0.11082.1000</Version>
55
+ </LST>
56
+ </Obj>
57
+ </En>
58
+ <En>
59
+ <S N="Key">CLRVersion</S>
60
+ <Version N="Value">4.0.30319.42000</Version>
61
+ </En>
62
+ <En>
63
+ <S N="Key">BuildVersion</S>
64
+ <Version N="Value">10.0.11082.1000</Version>
65
+ </En>
66
+ <En>
67
+ <S N="Key">WSManStackVersion</S>
68
+ <Version N="Value">3.0</Version>
69
+ </En>
70
+ <En>
71
+ <S N="Key">PSRemotingProtocolVersion</S>
72
+ <Version N="Value">2.3</Version>
73
+ </En>
74
+ <En>
75
+ <S N="Key">SerializationVersion</S>
76
+ <Version N="Value">1.1.0.1</Version>
77
+ </En>
78
+ </DCT>
79
+ </Obj>
80
+ </En>
81
+ </DCT>
82
+ </Obj>
83
+ <Obj N="HostInfo" RefId="6">
84
+ <MS>
85
+ <Obj N="_hostDefaultData" RefId="7">
86
+ <MS>
87
+ <Obj N="data" RefId="8">
88
+ <TN RefId="4">
89
+ <T>System.Collections.Hashtable</T>
90
+ <T>System.Object</T>
91
+ </TN>
92
+ <DCT>
93
+ <En>
94
+ <I32 N="Key">9</I32>
95
+ <Obj N="Value" RefId="9">
96
+ <MS>
97
+ <S N="T">System.String</S>
98
+ <S N="V">C:\dev\kitchen-vagrant</S>
99
+ </MS>
100
+ </Obj>
101
+ </En>
102
+ <En>
103
+ <I32 N="Key">8</I32>
104
+ <Obj N="Value" RefId="10">
105
+ <MS>
106
+ <S N="T">System.Management.Automation.Host.Size</S>
107
+ <Obj N="V" RefId="11">
108
+ <MS>
109
+ <I32 N="width">199</I32>
110
+ <I32 N="height">52</I32>
111
+ </MS>
112
+ </Obj>
113
+ </MS>
114
+ </Obj>
115
+ </En>
116
+ <En>
117
+ <I32 N="Key">7</I32>
118
+ <Obj N="Value" RefId="12">
119
+ <MS>
120
+ <S N="T">System.Management.Automation.Host.Size</S>
121
+ <Obj N="V" RefId="13">
122
+ <MS>
123
+ <I32 N="width">80</I32>
124
+ <I32 N="height">52</I32>
125
+ </MS>
126
+ </Obj>
127
+ </MS>
128
+ </Obj>
129
+ </En>
130
+ <En>
131
+ <I32 N="Key">6</I32>
132
+ <Obj N="Value" RefId="14">
133
+ <MS>
134
+ <S N="T">System.Management.Automation.Host.Size</S>
135
+ <Obj N="V" RefId="15">
136
+ <MS>
137
+ <I32 N="width">80</I32>
138
+ <I32 N="height">25</I32>
139
+ </MS>
140
+ </Obj>
141
+ </MS>
142
+ </Obj>
143
+ </En>
144
+ <En>
145
+ <I32 N="Key">5</I32>
146
+ <Obj N="Value" RefId="16">
147
+ <MS>
148
+ <S N="T">System.Management.Automation.Host.Size</S>
149
+ <Obj N="V" RefId="17">
150
+ <MS>
151
+ <I32 N="width">250</I32>
152
+ <I32 N="height">9999</I32>
153
+ </MS>
154
+ </Obj>
155
+ </MS>
156
+ </Obj>
157
+ </En>
158
+ <En>
159
+ <I32 N="Key">4</I32>
160
+ <Obj N="Value" RefId="18">
161
+ <MS>
162
+ <S N="T">System.Int32</S>
163
+ <I32 N="V">25</I32>
164
+ </MS>
165
+ </Obj>
166
+ </En>
167
+ <En>
168
+ <I32 N="Key">3</I32>
169
+ <Obj N="Value" RefId="19">
170
+ <MS>
171
+ <S N="T">System.Management.Automation.Host.Coordinates</S>
172
+ <Obj N="V" RefId="20">
173
+ <MS>
174
+ <I32 N="x">0</I32>
175
+ <I32 N="y">9974</I32>
176
+ </MS>
177
+ </Obj>
178
+ </MS>
179
+ </Obj>
180
+ </En>
181
+ <En>
182
+ <I32 N="Key">2</I32>
183
+ <Obj N="Value" RefId="21">
184
+ <MS>
185
+ <S N="T">System.Management.Automation.Host.Coordinates</S>
186
+ <Obj N="V" RefId="22">
187
+ <MS>
188
+ <I32 N="x">0</I32>
189
+ <I32 N="y">9998</I32>
190
+ </MS>
191
+ </Obj>
192
+ </MS>
193
+ </Obj>
194
+ </En>
195
+ <En>
196
+ <I32 N="Key">1</I32>
197
+ <Obj N="Value" RefId="23">
198
+ <MS>
199
+ <S N="T">System.ConsoleColor</S>
200
+ <I32 N="V">0</I32>
201
+ </MS>
202
+ </Obj>
203
+ </En>
204
+ <En>
205
+ <I32 N="Key">0</I32>
206
+ <Obj N="Value" RefId="24">
207
+ <MS>
208
+ <S N="T">System.ConsoleColor</S>
209
+ <I32 N="V">7</I32>
210
+ </MS>
211
+ </Obj>
212
+ </En>
213
+ </DCT>
214
+ </Obj>
215
+ </MS>
216
+ </Obj>
217
+ <B N="_isHostNull">false</B>
218
+ <B N="_isHostUINull">false</B>
219
+ <B N="_isHostRawUINull">false</B>
220
+ <B N="_useRunspaceHost">false</B>
221
+ </MS>
222
+ </Obj>
223
+ </MS>
224
+ </Obj>
@@ -15,6 +15,7 @@
15
15
  # limitations under the License.
16
16
 
17
17
  require_relative 'retryable'
18
+ require_relative 'suppressible'
18
19
  require_relative '../http/transport'
19
20
  require_relative '../wsmv/cleanup_command'
20
21
  require_relative '../wsmv/close_shell'
@@ -31,14 +32,16 @@ module WinRM
31
32
  TOO_MANY_COMMANDS = '2150859174'.freeze
32
33
  ERROR_OPERATION_ABORTED = '995'.freeze
33
34
  SHELL_NOT_FOUND = '2150858843'.freeze
35
+ ERROR_READING_REGISTRY_KEY = '2147943418'.freeze
34
36
 
35
37
  FAULTS_FOR_RESET = [
36
- '2150858843', # Shell has been closed
37
- '2147943418', # Error reading registry key
38
+ SHELL_NOT_FOUND,
39
+ ERROR_READING_REGISTRY_KEY,
38
40
  TOO_MANY_COMMANDS, # Maximum commands per user exceeded
39
41
  ].freeze
40
42
 
41
43
  include Retryable
44
+ include Suppressible
42
45
 
43
46
  # Create a new Cmd shell
44
47
  # @param connection_opts [ConnectionOpts] The WinRM connection options
@@ -86,10 +89,10 @@ module WinRM
86
89
  # Closes the shell if one is open
87
90
  def close
88
91
  return unless shell_id
89
- begin
90
- self.class.close_shell(connection_opts, transport, shell_id)
91
- rescue WinRMWSManFault => e
92
- raise unless [ERROR_OPERATION_ABORTED, SHELL_NOT_FOUND].include?(e.fault_code)
92
+ suppressible do
93
+ retryable(connection_opts[:retry_limit], connection_opts[:retry_delay]) do
94
+ self.class.close_shell(connection_opts, transport, shell_id)
95
+ end
93
96
  end
94
97
  remove_finalizer
95
98
  @shell_id = nil
@@ -153,12 +156,11 @@ module WinRM
153
156
  shell_uri: shell_uri,
154
157
  shell_id: shell_id,
155
158
  command_id: command_id)
156
- transport.send_request(cleanup_msg.build)
157
- rescue WinRMWSManFault => e
158
- raise unless [ERROR_OPERATION_ABORTED, SHELL_NOT_FOUND].include?(e.fault_code)
159
- rescue WinRMHTTPTransportError => t
160
- # dont let the cleanup raise so we dont lose any errors from the command
161
- logger.info("[WinRM] #{t.status_code} returned in cleanup with error: #{t.message}")
159
+ suppressible do
160
+ retryable(connection_opts[:retry_limit], connection_opts[:retry_delay]) do
161
+ transport.send_request(cleanup_msg.build)
162
+ end
163
+ end
162
164
  end
163
165
 
164
166
  def open
@@ -1,45 +1,36 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
- # Copyright 2015 Matt Wrock <matt@mattwrock.com>
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
- require_relative '../exceptions'
19
-
20
- module WinRM
21
- module Shells
22
- # Shell mixin for retrying an operation
23
- module Retryable
24
- RETRYABLE_EXCEPTIONS = lambda do
25
- [
26
- Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED, Errno::ETIMEDOUT,
27
- Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH, ::WinRM::WinRMWSManFault,
28
- ::WinRM::WinRMHTTPTransportError, ::WinRM::WinRMAuthorizationError,
29
- HTTPClient::KeepAliveDisconnected, HTTPClient::ConnectTimeoutError
30
- ].freeze
31
- end
32
-
33
- # Retries the operation a specified number of times with a delay between
34
- # @param retries [Integer] The number of times to retry
35
- # @param delay [Integer] The number of seconds to wait between retry attempts
36
- def retryable(retries, delay)
37
- yield
38
- rescue *RETRYABLE_EXCEPTIONS.call
39
- raise unless (retries -= 1) > 0
40
- sleep(delay)
41
- retry
42
- end
43
- end
44
- end
45
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
+ # Copyright 2015 Matt Wrock <matt@mattwrock.com>
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
+ require_relative '../exceptions'
19
+
20
+ module WinRM
21
+ module Shells
22
+ # Shell mixin for retrying an operation
23
+ module Retryable
24
+ # Retries the operation a specified number of times with a delay between
25
+ # @param retries [Integer] The number of times to retry
26
+ # @param delay [Integer] The number of seconds to wait between retry attempts
27
+ def retryable(retries, delay)
28
+ yield
29
+ rescue *WinRM::NETWORK_EXCEPTIONS.call
30
+ raise unless (retries -= 1) > 0
31
+ sleep(delay)
32
+ retry
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2017 Matt Wrock <matt@mattwrock.com>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative '../exceptions'
18
+
19
+ module WinRM
20
+ module Shells
21
+ # Shell mixin for suppressing a network exception
22
+ module Suppressible
23
+ # performs an operation and suppresses any network exceptions
24
+ def suppressible
25
+ yield
26
+ rescue *WinRM::NETWORK_EXCEPTIONS.call => e
27
+ logger.info("[WinRM] Exception suppressed: #{e.message}")
28
+ end
29
+ end
30
+ end
31
+ end
@@ -3,5 +3,5 @@
3
3
  # WinRM module
4
4
  module WinRM
5
5
  # The version of the WinRM library
6
- VERSION = '2.2.1'.freeze
6
+ VERSION = '2.2.2'.freeze
7
7
  end
@@ -213,11 +213,11 @@ describe DummyShell do
213
213
  expect(subject.shell_id).to be(nil)
214
214
  end
215
215
 
216
- context 'when shell was not found' do
216
+ context 'when connection is refused' do
217
217
  it 'does not raise' do
218
218
  subject.run(command, arguments)
219
219
  expect(DummyShell).to receive(:close_shell)
220
- .and_raise(WinRM::WinRMWSManFault.new('oops', '2150858843'))
220
+ .and_raise(Errno::ECONNREFUSED.new)
221
221
  expect { subject.close }.not_to raise_error
222
222
  end
223
223
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winrm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Wanek
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-04-05 00:00:00.000000000 Z
14
+ date: 2017-04-16 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: gssapi
@@ -271,6 +271,7 @@ files:
271
271
  - lib/winrm/shells/power_shell.rb
272
272
  - lib/winrm/shells/retryable.rb
273
273
  - lib/winrm/shells/shell_factory.rb
274
+ - lib/winrm/shells/suppressible.rb
274
275
  - lib/winrm/version.rb
275
276
  - lib/winrm/wsmv/base.rb
276
277
  - lib/winrm/wsmv/cleanup_command.rb
@@ -379,7 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
379
380
  version: '0'
380
381
  requirements: []
381
382
  rubyforge_project:
382
- rubygems_version: 2.6.10
383
+ rubygems_version: 2.6.11
383
384
  signing_key:
384
385
  specification_version: 4
385
386
  summary: Ruby library for Windows Remote Management