train 2.1.7 → 2.1.13

Sign up to get free protection for your applications and to get access to all the features.
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