train 2.1.7 → 2.1.13

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/train.rb +20 -20
  3. data/lib/train/errors.rb +1 -1
  4. data/lib/train/extras.rb +2 -2
  5. data/lib/train/extras/command_wrapper.rb +24 -24
  6. data/lib/train/extras/stat.rb +27 -27
  7. data/lib/train/file.rb +30 -30
  8. data/lib/train/file/local.rb +8 -8
  9. data/lib/train/file/local/unix.rb +5 -5
  10. data/lib/train/file/local/windows.rb +1 -1
  11. data/lib/train/file/remote.rb +8 -8
  12. data/lib/train/file/remote/aix.rb +1 -1
  13. data/lib/train/file/remote/linux.rb +2 -2
  14. data/lib/train/file/remote/qnx.rb +8 -8
  15. data/lib/train/file/remote/unix.rb +10 -14
  16. data/lib/train/file/remote/windows.rb +5 -5
  17. data/lib/train/globals.rb +1 -1
  18. data/lib/train/options.rb +8 -8
  19. data/lib/train/platforms.rb +8 -8
  20. data/lib/train/platforms/common.rb +1 -1
  21. data/lib/train/platforms/detect/helpers/os_common.rb +36 -32
  22. data/lib/train/platforms/detect/helpers/os_linux.rb +12 -12
  23. data/lib/train/platforms/detect/helpers/os_windows.rb +27 -29
  24. data/lib/train/platforms/detect/scanner.rb +4 -4
  25. data/lib/train/platforms/detect/specifications/api.rb +8 -8
  26. data/lib/train/platforms/detect/specifications/os.rb +252 -252
  27. data/lib/train/platforms/detect/uuid.rb +5 -7
  28. data/lib/train/platforms/platform.rb +9 -5
  29. data/lib/train/plugin_test_helper.rb +12 -12
  30. data/lib/train/plugins.rb +5 -5
  31. data/lib/train/plugins/base_connection.rb +13 -13
  32. data/lib/train/plugins/transport.rb +7 -7
  33. data/lib/train/transports/azure.rb +23 -23
  34. data/lib/train/transports/cisco_ios_connection.rb +20 -20
  35. data/lib/train/transports/clients/azure/graph_rbac.rb +2 -2
  36. data/lib/train/transports/clients/azure/vault.rb +4 -4
  37. data/lib/train/transports/docker.rb +4 -10
  38. data/lib/train/transports/gcp.rb +23 -23
  39. data/lib/train/transports/helpers/azure/file_credentials.rb +8 -8
  40. data/lib/train/transports/helpers/azure/file_parser.rb +1 -1
  41. data/lib/train/transports/helpers/azure/subscription_number_file_parser.rb +1 -1
  42. data/lib/train/transports/local.rb +22 -22
  43. data/lib/train/transports/mock.rb +33 -35
  44. data/lib/train/transports/ssh.rb +47 -47
  45. data/lib/train/transports/ssh_connection.rb +28 -28
  46. data/lib/train/transports/vmware.rb +32 -34
  47. data/lib/train/transports/winrm.rb +37 -37
  48. data/lib/train/transports/winrm_connection.rb +12 -12
  49. data/lib/train/version.rb +1 -1
  50. metadata +2 -2
@@ -20,9 +20,9 @@
20
20
  # See the License for the specific language governing permissions and
21
21
  # limitations under the License.
22
22
 
23
- require 'rbconfig'
24
- require 'uri'
25
- require 'train/errors'
23
+ require "rbconfig"
24
+ require "uri"
25
+ require "train/errors"
26
26
 
27
27
  module Train::Transports
28
28
  # Wrapped exception for any internally raised WinRM-related errors.
@@ -36,22 +36,22 @@ module Train::Transports
36
36
  # @author Salim Afiune <salim@afiunemaya.com.mx>
37
37
  # @author Fletcher Nichol <fnichol@nichol.ca>
38
38
  class WinRM < Train.plugin(1) # rubocop:disable ClassLength
39
- name 'winrm'
39
+ name "winrm"
40
40
 
41
- require 'train/transports/winrm_connection'
41
+ require "train/transports/winrm_connection"
42
42
 
43
43
  # ref: https://github.com/winrb/winrm#transports
44
- SUPPORTED_WINRM_TRANSPORTS = %i(negotiate ssl plaintext kerberos).freeze
44
+ SUPPORTED_WINRM_TRANSPORTS = %i{negotiate ssl plaintext kerberos}.freeze
45
45
 
46
46
  # common target configuration
47
47
  option :host, required: true
48
48
  option :port
49
- option :user, default: 'administrator', required: true
49
+ option :user, default: "administrator", required: true
50
50
  option :password, nil
51
51
  option :winrm_transport, default: :negotiate
52
52
  option :winrm_disable_sspi, default: false
53
53
  option :winrm_basic_auth_only, default: false
54
- option :path, default: '/wsman'
54
+ option :path, default: "/wsman"
55
55
  option :ssl, default: false
56
56
  option :self_signed, default: false
57
57
 
@@ -93,21 +93,21 @@ module Train::Transports
93
93
  super(opts)
94
94
 
95
95
  # set scheme and port based on ssl activation
96
- scheme = opts[:ssl] ? 'https' : 'http'
96
+ scheme = opts[:ssl] ? "https" : "http"
97
97
  port = opts[:port]
98
98
  port = (opts[:ssl] ? 5986 : 5985) if port.nil?
99
99
  winrm_transport = opts[:winrm_transport].to_sym
100
100
  unless SUPPORTED_WINRM_TRANSPORTS.include?(winrm_transport)
101
- fail Train::ClientError, "Unsupported transport type: #{winrm_transport.inspect}"
101
+ raise Train::ClientError, "Unsupported transport type: #{winrm_transport.inspect}"
102
102
  end
103
103
 
104
104
  # remove leading '/'
105
- path = (opts[:path] || '').sub(%r{^/+}, '')
105
+ path = (opts[:path] || "").sub(%r{^/+}, "")
106
106
 
107
107
  opts[:endpoint] = "#{scheme}://#{opts[:host]}:#{port}/#{path}"
108
108
  end
109
109
 
110
- WINRM_FS_SPEC_VERSION = '~> 1.0'.freeze
110
+ WINRM_FS_SPEC_VERSION = "~> 1.0".freeze
111
111
 
112
112
  # Builds the hash of options needed by the Connection object on
113
113
  # construction.
@@ -117,23 +117,23 @@ module Train::Transports
117
117
  # @api private
118
118
  def connection_options(opts)
119
119
  {
120
- logger: logger,
121
- transport: opts[:winrm_transport].to_sym,
122
- disable_sspi: opts[:winrm_disable_sspi],
123
- basic_auth_only: opts[:winrm_basic_auth_only],
124
- hostname: opts[:host],
125
- endpoint: opts[:endpoint],
126
- user: opts[:user],
127
- password: opts[:password],
128
- rdp_port: opts[:rdp_port],
129
- connection_retries: opts[:connection_retries],
130
- connection_retry_sleep: opts[:connection_retry_sleep],
131
- max_wait_until_ready: opts[:max_wait_until_ready],
120
+ logger: logger,
121
+ transport: opts[:winrm_transport].to_sym,
122
+ disable_sspi: opts[:winrm_disable_sspi],
123
+ basic_auth_only: opts[:winrm_basic_auth_only],
124
+ hostname: opts[:host],
125
+ endpoint: opts[:endpoint],
126
+ user: opts[:user],
127
+ password: opts[:password],
128
+ rdp_port: opts[:rdp_port],
129
+ connection_retries: opts[:connection_retries],
130
+ connection_retry_sleep: opts[:connection_retry_sleep],
131
+ max_wait_until_ready: opts[:max_wait_until_ready],
132
132
  no_ssl_peer_verification: opts[:self_signed],
133
- realm: opts[:kerberos_realm],
134
- service: opts[:kerberos_service],
135
- ca_trust_path: opts[:ca_trust_path],
136
- ssl_peer_fingerprint: opts[:ssl_peer_fingerprint],
133
+ realm: opts[:kerberos_realm],
134
+ service: opts[:kerberos_service],
135
+ ca_trust_path: opts[:ca_trust_path],
136
+ ssl_peer_fingerprint: opts[:ssl_peer_fingerprint],
137
137
  }
138
138
  end
139
139
 
@@ -156,24 +156,24 @@ module Train::Transports
156
156
  # (see Base#load_needed_dependencies!)
157
157
  def load_needed_dependencies!
158
158
  spec_version = WINRM_FS_SPEC_VERSION.dup
159
- logger.debug('winrm-fs requested,' \
159
+ logger.debug("winrm-fs requested," \
160
160
  " loading WinRM::FS gem (#{spec_version})")
161
- gem 'winrm-fs', spec_version
162
- first_load = require 'winrm-fs'
161
+ gem "winrm-fs", spec_version
162
+ first_load = require "winrm-fs"
163
163
  load_winrm_transport!
164
164
 
165
165
  if first_load
166
- logger.debug('WinRM::FS library loaded')
166
+ logger.debug("WinRM::FS library loaded")
167
167
  else
168
- logger.debug('WinRM::FS previously loaded')
168
+ logger.debug("WinRM::FS previously loaded")
169
169
  end
170
170
  rescue LoadError => e
171
171
  logger.fatal(
172
172
  "The `winrm-fs' gem is missing and must" \
173
- ' be installed or cannot be properly activated. Run' \
173
+ " be installed or cannot be properly activated. Run" \
174
174
  " `gem install winrm-fs --version '#{spec_version}'`" \
175
- ' or add the following to your Gemfile if you are using Bundler:' \
176
- " `gem 'winrm-fs', '#{spec_version}'`.",
175
+ " or add the following to your Gemfile if you are using Bundler:" \
176
+ " `gem 'winrm-fs', '#{spec_version}'`."
177
177
  )
178
178
  raise Train::UserError,
179
179
  "Could not load or activate WinRM::FS (#{e.message})"
@@ -183,7 +183,7 @@ module Train::Transports
183
183
  #
184
184
  # @api private
185
185
  def load_winrm_transport!
186
- silence_warnings { require 'winrm-fs' }
186
+ silence_warnings { require "winrm-fs" }
187
187
  end
188
188
 
189
189
  # Return the last saved WinRM connection instance.
@@ -49,7 +49,7 @@ class Train::Transports::WinRM
49
49
 
50
50
  # (see Base::Connection#login_command)
51
51
  def login_command
52
- case RbConfig::CONFIG['host_os']
52
+ case RbConfig::CONFIG["host_os"]
53
53
  when /darwin/
54
54
  login_command_for_mac
55
55
  when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
@@ -57,7 +57,7 @@ class Train::Transports::WinRM
57
57
  when /linux/
58
58
  login_command_for_linux
59
59
  else
60
- fail ActionFailed,
60
+ raise ActionFailed,
61
61
  "Remote login not supported in #{self.class} " \
62
62
  "from host OS '#{RbConfig::CONFIG['host_os']}'."
63
63
  end
@@ -79,7 +79,7 @@ class Train::Transports::WinRM
79
79
  delay = 3
80
80
  session(
81
81
  retry_limit: @max_wait_until_ready / delay,
82
- retry_delay: delay,
82
+ retry_delay: delay
83
83
  )
84
84
  run_command_via_connection(PING_COMMAND.dup)
85
85
  end
@@ -99,7 +99,7 @@ class Train::Transports::WinRM
99
99
  def run_command_via_connection(command, &data_handler)
100
100
  return if command.nil?
101
101
  logger.debug("[WinRM] #{self} (#{command})")
102
- out = ''
102
+ out = ""
103
103
 
104
104
  response = session.run(command) do |stdout, _|
105
105
  yield(stdout) if data_handler && stdout
@@ -119,7 +119,7 @@ class Train::Transports::WinRM
119
119
  host = URI.parse(options[:endpoint]).host
120
120
  content = [
121
121
  "full address:s:#{host}:#{@rdp_port}",
122
- 'prompt for credentials:i:1',
122
+ "prompt for credentials:i:1",
123
123
  "username:s:#{options[:user]}",
124
124
  ].join("\n")
125
125
 
@@ -145,10 +145,10 @@ class Train::Transports::WinRM
145
145
  # @return [LoginCommand] a login command
146
146
  # @api private
147
147
  def login_command_for_linux
148
- args = %W( -u #{options[:user]} )
149
- args += %W( -p #{options[:pass]} ) if options.key?(:pass)
150
- args += %W( #{URI.parse(options[:endpoint]).host}:#{@rdp_port} )
151
- LoginCommand.new('rdesktop', args)
148
+ args = %W{ -u #{options[:user]} }
149
+ args += %W{ -p #{options[:pass]} } if options.key?(:pass)
150
+ args += %W{ #{URI.parse(options[:endpoint]).host}:#{@rdp_port} }
151
+ LoginCommand.new("rdesktop", args)
152
152
  end
153
153
 
154
154
  # Builds a `LoginCommand` for use by Mac-based platforms.
@@ -156,7 +156,7 @@ class Train::Transports::WinRM
156
156
  # @return [LoginCommand] a login command
157
157
  # @api private
158
158
  def login_command_for_mac
159
- LoginCommand.new('open', rdp_doc(mac: true))
159
+ LoginCommand.new("open", rdp_doc(mac: true))
160
160
  end
161
161
 
162
162
  # Builds a `LoginCommand` for use by Windows-based platforms.
@@ -164,7 +164,7 @@ class Train::Transports::WinRM
164
164
  # @return [LoginCommand] a login command
165
165
  # @api private
166
166
  def login_command_for_windows
167
- LoginCommand.new('mstsc', rdp_doc)
167
+ LoginCommand.new("mstsc", rdp_doc)
168
168
  end
169
169
 
170
170
  # Establishes a remote shell session, or establishes one when invoked
@@ -193,7 +193,7 @@ class Train::Transports::WinRM
193
193
  # @api private
194
194
  def to_s
195
195
  options_to_print = @options.clone
196
- options_to_print[:password] = '<hidden>' if options_to_print.key?(:password)
196
+ options_to_print[:password] = "<hidden>" if options_to_print.key?(:password)
197
197
  "#{@username}@#{@hostname}<#{options_to_print.inspect}>"
198
198
  end
199
199
  end
data/lib/train/version.rb CHANGED
@@ -3,5 +3,5 @@
3
3
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
4
 
5
5
  module Train
6
- VERSION = '2.1.7'.freeze
6
+ VERSION = "2.1.13".freeze
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: train
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.7
4
+ version: 2.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-20 00:00:00.000000000 Z
11
+ date: 2019-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json