winrm 2.0.3 → 2.1.0

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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -10
  3. data/.rubocop.yml +26 -26
  4. data/.travis.yml +11 -11
  5. data/Gemfile +3 -3
  6. data/README.md +260 -233
  7. data/Rakefile +34 -34
  8. data/Vagrantfile +6 -6
  9. data/WinrmAppveyor.psm1 +31 -31
  10. data/appveyor.yml +51 -51
  11. data/changelog.md +104 -101
  12. data/lib/winrm.rb +39 -39
  13. data/lib/winrm/connection.rb +83 -82
  14. data/lib/winrm/connection_opts.rb +91 -91
  15. data/lib/winrm/exceptions.rb +76 -76
  16. data/lib/winrm/http/response_handler.rb +96 -96
  17. data/lib/winrm/http/transport.rb +424 -424
  18. data/lib/winrm/http/transport_factory.rb +68 -68
  19. data/lib/winrm/output.rb +59 -59
  20. data/lib/winrm/psrp/create_pipeline.xml.erb +167 -167
  21. data/lib/winrm/psrp/fragment.rb +70 -70
  22. data/lib/winrm/psrp/init_runspace_pool.xml.erb +224 -224
  23. data/lib/winrm/psrp/message.rb +130 -130
  24. data/lib/winrm/psrp/message_data.rb +42 -42
  25. data/lib/winrm/psrp/message_data/base.rb +49 -49
  26. data/lib/winrm/psrp/message_data/error_record.rb +68 -68
  27. data/lib/winrm/psrp/message_data/pipeline_host_call.rb +32 -32
  28. data/lib/winrm/psrp/message_data/pipeline_output.rb +49 -49
  29. data/lib/winrm/psrp/message_data/pipeline_state.rb +40 -40
  30. data/lib/winrm/psrp/message_data/runspacepool_host_call.rb +32 -32
  31. data/lib/winrm/psrp/message_data/runspacepool_state.rb +39 -39
  32. data/lib/winrm/psrp/message_data/session_capability.rb +36 -36
  33. data/lib/winrm/psrp/message_defragmenter.rb +62 -62
  34. data/lib/winrm/psrp/message_factory.rb +75 -75
  35. data/lib/winrm/psrp/message_fragmenter.rb +60 -60
  36. data/lib/winrm/psrp/powershell_output_decoder.rb +139 -139
  37. data/lib/winrm/psrp/receive_response_reader.rb +97 -97
  38. data/lib/winrm/psrp/session_capability.xml.erb +7 -7
  39. data/lib/winrm/psrp/uuid.rb +40 -40
  40. data/lib/winrm/shells/base.rb +180 -175
  41. data/lib/winrm/shells/cmd.rb +65 -65
  42. data/lib/winrm/shells/power_shell.rb +202 -202
  43. data/lib/winrm/shells/retryable.rb +45 -45
  44. data/lib/winrm/shells/shell_factory.rb +58 -50
  45. data/lib/winrm/version.rb +7 -7
  46. data/lib/winrm/wsmv/base.rb +59 -59
  47. data/lib/winrm/wsmv/cleanup_command.rb +61 -61
  48. data/lib/winrm/wsmv/close_shell.rb +50 -50
  49. data/lib/winrm/wsmv/command.rb +101 -101
  50. data/lib/winrm/wsmv/command_output.rb +76 -76
  51. data/lib/winrm/wsmv/command_output_decoder.rb +55 -55
  52. data/lib/winrm/wsmv/configuration.rb +46 -46
  53. data/lib/winrm/wsmv/create_pipeline.rb +66 -66
  54. data/lib/winrm/wsmv/create_shell.rb +119 -119
  55. data/lib/winrm/wsmv/header.rb +203 -203
  56. data/lib/winrm/wsmv/init_runspace_pool.rb +95 -95
  57. data/lib/winrm/wsmv/iso8601_duration.rb +60 -60
  58. data/lib/winrm/wsmv/keep_alive.rb +68 -68
  59. data/lib/winrm/wsmv/receive_response_reader.rb +126 -126
  60. data/lib/winrm/wsmv/send_data.rb +68 -68
  61. data/lib/winrm/wsmv/soap.rb +51 -51
  62. data/lib/winrm/wsmv/wql_query.rb +79 -79
  63. data/lib/winrm/wsmv/write_stdin.rb +88 -88
  64. data/tests/integration/auth_timeout_spec.rb +18 -18
  65. data/tests/integration/cmd_spec.rb +131 -110
  66. data/tests/integration/config-example.yml +16 -16
  67. data/tests/integration/issue_59_spec.rb +26 -26
  68. data/tests/integration/powershell_spec.rb +165 -165
  69. data/tests/integration/spec_helper.rb +65 -65
  70. data/tests/integration/transport_spec.rb +99 -99
  71. data/tests/integration/wql_spec.rb +16 -16
  72. data/tests/matchers.rb +60 -60
  73. data/tests/spec/configuration_spec.rb +184 -184
  74. data/tests/spec/connection_spec.rb +39 -39
  75. data/tests/spec/exception_spec.rb +50 -50
  76. data/tests/spec/http/transport_factory_spec.rb +68 -68
  77. data/tests/spec/http/transport_spec.rb +44 -44
  78. data/tests/spec/output_spec.rb +127 -127
  79. data/tests/spec/psrp/fragment_spec.rb +62 -62
  80. data/tests/spec/psrp/message_data/base_spec.rb +13 -13
  81. data/tests/spec/psrp/message_data/error_record_spec.rb +41 -41
  82. data/tests/spec/psrp/message_data/pipeline_host_call_spec.rb +25 -25
  83. data/tests/spec/psrp/message_data/pipeline_output_spec.rb +32 -32
  84. data/tests/spec/psrp/message_data/pipeline_state_spec.rb +40 -40
  85. data/tests/spec/psrp/message_data/runspace_pool_host_call_spec.rb +25 -25
  86. data/tests/spec/psrp/message_data/runspacepool_state_spec.rb +16 -16
  87. data/tests/spec/psrp/message_data/session_capability_spec.rb +30 -30
  88. data/tests/spec/psrp/message_data_spec.rb +35 -35
  89. data/tests/spec/psrp/message_defragmenter_spec.rb +47 -47
  90. data/tests/spec/psrp/message_fragmenter_spec.rb +105 -105
  91. data/tests/spec/psrp/powershell_output_decoder_spec.rb +100 -100
  92. data/tests/spec/psrp/psrp_message_spec.rb +70 -70
  93. data/tests/spec/psrp/recieve_response_reader_spec.rb +172 -172
  94. data/tests/spec/psrp/uuid_spec.rb +28 -28
  95. data/tests/spec/response_handler_spec.rb +61 -61
  96. data/tests/spec/shells/base_spec.rb +202 -202
  97. data/tests/spec/shells/cmd_spec.rb +75 -75
  98. data/tests/spec/shells/powershell_spec.rb +175 -175
  99. data/tests/spec/spec_helper.rb +47 -47
  100. data/tests/spec/stubs/clixml/error_record.xml.erb +84 -84
  101. data/tests/spec/stubs/clixml/pipeline_state.xml.erb +88 -88
  102. data/tests/spec/stubs/responses/get_command_output_response.xml.erb +13 -13
  103. data/tests/spec/stubs/responses/get_command_output_response_not_done.xml.erb +10 -10
  104. data/tests/spec/stubs/responses/get_powershell_keepalive_response.xml.erb +10 -10
  105. data/tests/spec/stubs/responses/get_powershell_output_response.xml.erb +12 -12
  106. data/tests/spec/stubs/responses/get_powershell_output_response_not_done.xml.erb +9 -9
  107. data/tests/spec/stubs/responses/open_shell_v1.xml +19 -19
  108. data/tests/spec/stubs/responses/open_shell_v2.xml +20 -20
  109. data/tests/spec/stubs/responses/soap_fault_v1.xml +36 -36
  110. data/tests/spec/stubs/responses/soap_fault_v2.xml +42 -42
  111. data/tests/spec/stubs/responses/wmi_error_v2.xml +41 -41
  112. data/tests/spec/wsmv/cleanup_command_spec.rb +22 -22
  113. data/tests/spec/wsmv/close_shell_spec.rb +17 -17
  114. data/tests/spec/wsmv/command_output_decoder_spec.rb +37 -37
  115. data/tests/spec/wsmv/command_output_spec.rb +45 -45
  116. data/tests/spec/wsmv/command_spec.rb +19 -19
  117. data/tests/spec/wsmv/configuration_spec.rb +17 -17
  118. data/tests/spec/wsmv/create_pipeline_spec.rb +31 -31
  119. data/tests/spec/wsmv/create_shell_spec.rb +38 -38
  120. data/tests/spec/wsmv/init_runspace_pool_spec.rb +36 -36
  121. data/tests/spec/wsmv/keep_alive_spec.rb +21 -21
  122. data/tests/spec/wsmv/receive_response_reader_spec.rb +123 -123
  123. data/tests/spec/wsmv/send_data_spec.rb +30 -30
  124. data/tests/spec/wsmv/wql_query_spec.rb +13 -13
  125. data/tests/spec/wsmv/write_stdin_spec.rb +22 -22
  126. data/winrm.gemspec +42 -42
  127. metadata +2 -2
@@ -1,39 +1,39 @@
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
- require 'logging'
18
- require_relative 'winrm/version'
19
- require_relative 'winrm/connection'
20
- require_relative 'winrm/exceptions'
21
-
22
- # Main WinRM module entry point
23
- module WinRM
24
- # Enable logging if it is requested. We do this before
25
- # anything else so that we can setup the output before
26
- # any logging occurs.
27
- if ENV['WINRM_LOG'] && ENV['WINRM_LOG'] != ''
28
- begin
29
- Logging.logger.root.level = ENV['WINRM_LOG']
30
- Logging.logger.root.appenders = Logging.appenders.stderr
31
- rescue ArgumentError
32
- # This means that the logging level wasn't valid
33
- $stderr.puts "Invalid WINRM_LOG level is set: #{ENV['WINRM_LOG']}"
34
- $stderr.puts ''
35
- $stderr.puts 'Please use one of the standard log levels: ' \
36
- 'debug, info, warn, or error'
37
- end
38
- end
39
- 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
+ require 'logging'
18
+ require_relative 'winrm/version'
19
+ require_relative 'winrm/connection'
20
+ require_relative 'winrm/exceptions'
21
+
22
+ # Main WinRM module entry point
23
+ module WinRM
24
+ # Enable logging if it is requested. We do this before
25
+ # anything else so that we can setup the output before
26
+ # any logging occurs.
27
+ if ENV['WINRM_LOG'] && ENV['WINRM_LOG'] != ''
28
+ begin
29
+ Logging.logger.root.level = ENV['WINRM_LOG']
30
+ Logging.logger.root.appenders = Logging.appenders.stderr
31
+ rescue ArgumentError
32
+ # This means that the logging level wasn't valid
33
+ $stderr.puts "Invalid WINRM_LOG level is set: #{ENV['WINRM_LOG']}"
34
+ $stderr.puts ''
35
+ $stderr.puts 'Please use one of the standard log levels: ' \
36
+ 'debug, info, warn, or error'
37
+ end
38
+ end
39
+ end
@@ -1,82 +1,83 @@
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_relative 'connection_opts'
18
- require_relative 'http/transport_factory'
19
- require_relative 'shells/shell_factory'
20
- require_relative 'wsmv/wql_query'
21
-
22
- module WinRM
23
- # WinRM connection used to establish a session with the remote WinRM service.
24
- class Connection
25
- # Creates a new WinRM connection
26
- # See the ConnectionOpts class for connection options.
27
- def initialize(connection_opts)
28
- configure_connection_opts(connection_opts)
29
- configure_logger
30
- end
31
-
32
- attr_accessor :logger
33
-
34
- # Creates a new shell on the remote Windows server associated with
35
- # this connection.
36
- # @param shell_type [Symbol] The shell type :cmd or :powershell
37
- # @return [Shell] PowerShell or Cmd shell instance.
38
- def shell(shell_type)
39
- shell = shell_factory.create_shell(shell_type)
40
- if block_given?
41
- begin
42
- yield shell
43
- ensure
44
- shell.close
45
- end
46
- else
47
- shell
48
- end
49
- end
50
-
51
- # Executes a WQL query against the WinRM connection
52
- # @param wql [String] The wql query
53
- # @return [Hash] Hash representation of wql query response
54
- def run_wql(wql)
55
- query = WinRM::WSMV::WqlQuery.new(@connection_opts, wql)
56
- query.process_response(transport.send_request(query.build))
57
- end
58
-
59
- private
60
-
61
- def configure_connection_opts(connection_opts)
62
- @connection_opts = ConnectionOpts.create_with_defaults(connection_opts)
63
- end
64
-
65
- def configure_logger
66
- @logger = Logging.logger[self]
67
- logger.level = :warn
68
- logger.add_appenders(Logging.appenders.stdout)
69
- end
70
-
71
- def shell_factory
72
- @shell_factory ||= WinRM::Shells::ShellFactory.new(@connection_opts, transport, logger)
73
- end
74
-
75
- def transport
76
- @transport ||= begin
77
- transport_factory = WinRM::HTTP::TransportFactory.new
78
- transport_factory.create_transport(@connection_opts)
79
- end
80
- end
81
- end
82
- 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_relative 'connection_opts'
18
+ require_relative 'http/transport_factory'
19
+ require_relative 'shells/shell_factory'
20
+ require_relative 'wsmv/wql_query'
21
+
22
+ module WinRM
23
+ # WinRM connection used to establish a session with the remote WinRM service.
24
+ class Connection
25
+ # Creates a new WinRM connection
26
+ # See the ConnectionOpts class for connection options.
27
+ def initialize(connection_opts)
28
+ configure_connection_opts(connection_opts)
29
+ configure_logger
30
+ end
31
+
32
+ attr_accessor :logger
33
+
34
+ # Creates a new shell on the remote Windows server associated with
35
+ # this connection.
36
+ # @param shell_type [Symbol] The shell type :cmd or :powershell
37
+ # @param shell_opts [Hash] Options targeted for the created shell
38
+ # @return [Shell] PowerShell or Cmd shell instance.
39
+ def shell(shell_type, shell_opts = {})
40
+ shell = shell_factory.create_shell(shell_type, shell_opts)
41
+ if block_given?
42
+ begin
43
+ yield shell
44
+ ensure
45
+ shell.close
46
+ end
47
+ else
48
+ shell
49
+ end
50
+ end
51
+
52
+ # Executes a WQL query against the WinRM connection
53
+ # @param wql [String] The wql query
54
+ # @return [Hash] Hash representation of wql query response
55
+ def run_wql(wql)
56
+ query = WinRM::WSMV::WqlQuery.new(@connection_opts, wql)
57
+ query.process_response(transport.send_request(query.build))
58
+ end
59
+
60
+ private
61
+
62
+ def configure_connection_opts(connection_opts)
63
+ @connection_opts = ConnectionOpts.create_with_defaults(connection_opts)
64
+ end
65
+
66
+ def configure_logger
67
+ @logger = Logging.logger[self]
68
+ logger.level = :warn
69
+ logger.add_appenders(Logging.appenders.stdout)
70
+ end
71
+
72
+ def shell_factory
73
+ @shell_factory ||= WinRM::Shells::ShellFactory.new(@connection_opts, transport, logger)
74
+ end
75
+
76
+ def transport
77
+ @transport ||= begin
78
+ transport_factory = WinRM::HTTP::TransportFactory.new
79
+ transport_factory.create_transport(@connection_opts)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -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_fixnum(:retry_limit)
79
- validate_fixnum(:retry_delay)
80
- validate_fixnum(:max_envelope_size)
81
- validate_fixnum(:operation_timeout)
82
- validate_fixnum(:receive_timeout, self[:operation_timeout])
83
- end
84
-
85
- def validate_fixnum(key, min = 0)
86
- value = self[key]
87
- raise "#{key} must be a Fixnum" unless value && value.is_a?(Fixnum)
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_fixnum(:retry_limit)
79
+ validate_fixnum(:retry_delay)
80
+ validate_fixnum(:max_envelope_size)
81
+ validate_fixnum(:operation_timeout)
82
+ validate_fixnum(:receive_timeout, self[:operation_timeout])
83
+ end
84
+
85
+ def validate_fixnum(key, min = 0)
86
+ value = self[key]
87
+ raise "#{key} must be a Fixnum" unless value && value.is_a?(Fixnum)
88
+ raise "#{key} must be greater than #{min}" unless value > min
89
+ end
90
+ end
91
+ end
@@ -1,76 +1,76 @@
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
+ # 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