train-core 3.3.1 → 3.3.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/train.rb +1 -2
  3. data/lib/train/errors.rb +0 -1
  4. data/lib/train/extras.rb +0 -1
  5. data/lib/train/extras/command_wrapper.rb +0 -1
  6. data/lib/train/extras/stat.rb +0 -1
  7. data/lib/train/file.rb +0 -1
  8. data/lib/train/file/local.rb +0 -2
  9. data/lib/train/file/local/unix.rb +1 -3
  10. data/lib/train/file/local/windows.rb +0 -2
  11. data/lib/train/file/remote.rb +0 -2
  12. data/lib/train/file/remote/aix.rb +0 -2
  13. data/lib/train/file/remote/linux.rb +0 -2
  14. data/lib/train/file/remote/qnx.rb +0 -1
  15. data/lib/train/file/remote/unix.rb +1 -1
  16. data/lib/train/file/remote/windows.rb +0 -2
  17. data/lib/train/options.rb +0 -1
  18. data/lib/train/platforms.rb +0 -2
  19. data/lib/train/platforms/common.rb +0 -2
  20. data/lib/train/platforms/detect.rb +0 -2
  21. data/lib/train/platforms/detect/helpers/os_common.rb +17 -9
  22. data/lib/train/platforms/detect/helpers/os_linux.rb +0 -2
  23. data/lib/train/platforms/detect/scanner.rb +0 -2
  24. data/lib/train/platforms/detect/specifications/api.rb +0 -2
  25. data/lib/train/platforms/detect/specifications/os.rb +3 -2
  26. data/lib/train/platforms/detect/uuid.rb +2 -2
  27. data/lib/train/platforms/family.rb +0 -2
  28. data/lib/train/platforms/platform.rb +1 -3
  29. data/lib/train/plugin_test_helper.rb +5 -5
  30. data/lib/train/plugins.rb +1 -2
  31. data/lib/train/plugins/base_connection.rb +1 -3
  32. data/lib/train/plugins/transport.rb +0 -1
  33. data/lib/train/transports/cisco_ios_connection.rb +0 -2
  34. data/lib/train/transports/local.rb +5 -6
  35. data/lib/train/transports/ssh.rb +14 -4
  36. data/lib/train/transports/ssh_connection.rb +2 -5
  37. data/lib/train/version.rb +1 -2
  38. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0245d5647c9a636cff344b8976bc6983d0f375f4e66b2baa4d2b8dccfcc98f24
4
- data.tar.gz: c8a74114fd330ffeff3063fd9d452b7142287a0502033e1f91ae9e867c9c0966
3
+ metadata.gz: c4bfda9949a3f24a3c7d48f8bb23384c73f064eccfa0f44029872e13913880c9
4
+ data.tar.gz: 6598c63e265c79e1344010ace35b40d1f5bd1919bb8039d4ae868c54f9f85dc5
5
5
  SHA512:
6
- metadata.gz: 4d622422a8d022e6e8c6770d7baf5ae00afd8466029bed65ce86fc08af51308818170744edbae6cfa7242e19ced2e30f202bdf98f16aa02a43547df171c47e05
7
- data.tar.gz: dda8b333a8a2b9716e992630d65a37599a0a8a7099d52ffd3183a1cb82a2f2aeccdbca1fd5287f285b59ff931fba7a9eaa5ca3a42b65a19fa18ba9019632d355
6
+ metadata.gz: aeb75022b5ff8c0f93ce22b35a6d8af8b31c8f3906fe357e502cd6f7ab8e7cb0bf55df61c8e891579b5338f875413b6c1372535e5af30d3011d54fd8b7822968
7
+ data.tar.gz: 3c23b61031fe8c0e8d691929ccb9007a8272d1de9736b8c5bef1ffcfd8a3078b31f556454f6676cc9d9a2515333015852f64f8e5ce47d2313e393eb4b230f9f7
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
3
 
@@ -7,7 +6,7 @@ require_relative "train/options"
7
6
  require_relative "train/plugins"
8
7
  require_relative "train/errors"
9
8
  require_relative "train/platforms"
10
- require "addressable/uri"
9
+ require "addressable/uri" unless defined?(Addressable::URI)
11
10
 
12
11
  module Train
13
12
  # Create a new transport instance, with the plugin indicated by the
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
3
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
3
 
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # author: Dominik Richter
3
2
  # author: Christoph Hartmann
4
3
 
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # author: Dominik Richter
3
2
  # author: Christoph Hartmann
4
3
  module Train::Extras
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # author: Christoph Hartmann
4
3
  # author: Dominik Richter
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train
4
2
  class File
5
3
  class Local < Train::File
@@ -1,6 +1,4 @@
1
- # encoding: utf-8
2
-
3
- require "shellwords"
1
+ require "shellwords" unless defined?(Shellwords)
4
2
  require_relative "../../extras/stat"
5
3
 
6
4
  module Train
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train
4
2
  class File
5
3
  class Local
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train
4
2
  class File
5
3
  class Remote < Train::File
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  require_relative "unix"
4
2
 
5
3
  module Train
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  require_relative "unix"
4
2
 
5
3
  module Train
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # author: Christoph Hartmann
4
3
  # author: Dominik Richter
@@ -1,4 +1,4 @@
1
- require "shellwords"
1
+ require "shellwords" unless defined?(Shellwords)
2
2
 
3
3
  module Train
4
4
  class File
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train
4
2
  class File
5
3
  class Remote
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
3
  # Author:: Christoph Hartmann (<chris@lollyrock.com>)
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  require_relative "platforms/common"
4
2
  require_relative "platforms/detect"
5
3
  require_relative "platforms/detect/scanner"
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train::Platforms
4
2
  module Common
5
3
  # Add a family connection. This will create a family
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train::Platforms
4
2
  module Detect
5
3
  # Main detect method to scan all platforms for a match
@@ -1,6 +1,6 @@
1
1
  require_relative "os_linux"
2
2
  require_relative "os_windows"
3
- require "rbconfig"
3
+ require "rbconfig" unless defined?(RbConfig)
4
4
 
5
5
  module Train::Platforms::Detect::Helpers
6
6
  module OSCommon
@@ -34,16 +34,24 @@ module Train::Platforms::Detect::Helpers
34
34
  end
35
35
 
36
36
  def command_output(cmd)
37
- res = @backend.run_command(cmd).stdout
38
- # When you try to execute command using ssh connction as root user and you have provided ssh user identity file
39
- # it gives standard output to login as authorised user other than root. To show this standard ouput as an error
37
+ res = @backend.run_command(cmd)
38
+ stdout = res.stdout
39
+ stderr = res.stderr
40
+ # When you try to execute command using ssh connection as root user and you have provided ssh user identity file
41
+ # it gives standard output to login as authorized user other than root. To show this standard output as an error
40
42
  # to user we are matching the string of stdout and raising the error here so that user gets exact information.
41
- if @backend.class.to_s == "Train::Transports::SSH::Connection" && res =~ /Please login as the user/
42
- raise Train::UserError, "SSH failed: #{res}"
43
+ if @backend.class.to_s == "Train::Transports::SSH::Connection"
44
+ if stdout =~ /Please login as the user/
45
+ raise Train::UserError, "SSH failed: #{stdout}"
46
+ end
47
+
48
+ if stderr =~ /WARNING: Your password has expired/
49
+ raise Train::UserError, "SSH failed: #{stderr}"
50
+ end
43
51
  end
44
52
 
45
- res.strip! unless res.nil?
46
- res
53
+ stdout.strip! unless stdout.nil?
54
+ stdout
47
55
  end
48
56
 
49
57
  def unix_uname_s
@@ -157,7 +165,7 @@ module Train::Platforms::Detect::Helpers
157
165
  def json_cmd(cmd)
158
166
  cmd = @backend.run_command(cmd)
159
167
  if cmd.exit_status == 0 && !cmd.stdout.empty?
160
- require "json"
168
+ require "json" unless defined?(JSON)
161
169
  eos_ver = JSON.parse(cmd.stdout)
162
170
  @platform[:release] = eos_ver["version"]
163
171
  @platform[:arch] = eos_ver["architecture"]
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train::Platforms::Detect::Helpers
4
2
  module Linux
5
3
  def redhatish_platform(conf)
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  require_relative "helpers/os_common"
4
2
 
5
3
  module Train::Platforms::Detect
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train::Platforms::Detect::Specifications
4
2
  class Api
5
3
  def self.load
@@ -128,7 +128,7 @@ module Train::Platforms::Detect::Specifications
128
128
 
129
129
  declare_lsb("scientific", "Scientific Linux", "redhat", /scientific/i)
130
130
 
131
- declare_lsb("xenserver", "Xenserer Linux", "redhat", /xenserver/i)
131
+ declare_lsb("xenserver", "Xenserver Linux", "redhat", /xenserver/i)
132
132
 
133
133
  declare_instance("parallels-release", "Parallels Linux", "redhat") do
134
134
  if (raw = unix_file_contents("/etc/parallels-release"))
@@ -357,7 +357,7 @@ module Train::Platforms::Detect::Specifications
357
357
  declare_instance("mac_os_x", "macOS X", "darwin") do
358
358
  cmd = unix_file_contents("/System/Library/CoreServices/SystemVersion.plist")
359
359
  @platform[:uuid_command] = "system_profiler SPHardwareDataType | awk '/UUID/ { print $3; }'"
360
- cmd =~ /Mac OS X/i
360
+ cmd =~ /Mac OS X|macOS/i
361
361
  end
362
362
 
363
363
  declare_instance("darwin", "Darwin", "darwin") do
@@ -369,6 +369,7 @@ module Train::Platforms::Detect::Specifications
369
369
  declare_bsd("freebsd", "Freebsd", "bsd", /freebsd/i)
370
370
  declare_bsd("openbsd", "Openbsd", "bsd", /openbsd/i)
371
371
  declare_bsd("netbsd", "Netbsd", "bsd", /netbsd/i)
372
+ declare_bsd("dragonflybsd", "Dragonflybsd", "bsd", /dragonfly/i)
372
373
  end
373
374
 
374
375
  def self.load_other
@@ -1,6 +1,6 @@
1
1
  require "digest/sha1"
2
- require "securerandom"
3
- require "json"
2
+ require "securerandom" unless defined?(SecureRandom)
3
+ require "json" unless defined?(JSON)
4
4
 
5
5
  module Train::Platforms::Detect
6
6
  class UUID
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train::Platforms
4
2
  class Family
5
3
  include Train::Platforms::Common
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Train::Platforms
4
2
  class Platform
5
3
  include Train::Platforms::Common
@@ -47,7 +45,7 @@ module Train::Platforms
47
45
  @uuid ||= Train::Platforms::Detect::UUID.new(self).find_or_create_uuid.downcase
48
46
  end
49
47
 
50
- # This is for backwords compatability with
48
+ # This is for backwards compatibility with
51
49
  # the current inspec os resource.
52
50
  def[](name)
53
51
  if respond_to?(name)
@@ -13,13 +13,13 @@ require "minitest/spec"
13
13
  require "minitest/autorun"
14
14
 
15
15
  # Data formats commonly used in testing
16
- require "json"
17
- require "ostruct"
16
+ require "json" unless defined?(JSON)
17
+ require "ostruct" unless defined?(OpenStruct)
18
18
 
19
19
  # Utilities often needed
20
- require "fileutils"
21
- require "tmpdir"
22
- require "pathname"
20
+ require "fileutils" unless defined?(FileUtils)
21
+ require "tmpdir" unless defined?(Dir.mktmpdir)
22
+ require "pathname" unless defined?(Pathname)
23
23
 
24
24
  # You might want to put some debugging tools here. We run tests to find bugs,
25
25
  # after all.
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
3
  # Author:: Christoph Hartmann (<chris@lollyrock.com>)
@@ -24,7 +23,7 @@ module Train
24
23
  # Create a versioned plugin by providing the transport layer plugin version
25
24
  # to this method. It will then select the correct class to inherit from.
26
25
  #
27
- # The plugin version determins what methods will be available to your plugin.
26
+ # The plugin version determines what methods will be available to your plugin.
28
27
  #
29
28
  # @param [Int] version = 1 the plugin version to use
30
29
  # @return [Transport] the versioned transport base class
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  require_relative "../errors"
4
2
  require_relative "../extras"
5
3
  require_relative "../file"
@@ -160,7 +158,7 @@ class Train::Plugins::Transport
160
158
  # service is preferred to simply waiting on a socket to become
161
159
  # available.
162
160
  def wait_until_ready
163
- # this method may be left unimplemented if that is applicablelog
161
+ # this method may be left unimplemented if that is applicable log
164
162
  end
165
163
 
166
164
  private
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
3
  # Author:: Christoph Hartmann (<chris@lollyrock.com>)
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  class Train::Transports::SSH
4
2
  class CiscoIOSConnection < BaseConnection
5
3
  class BadEnablePassword < Train::TransportError; end
@@ -1,11 +1,10 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # author: Dominik Richter
4
3
  # author: Christoph Hartmann
5
4
 
6
5
  require_relative "../plugins"
7
6
  require_relative "../errors"
8
- require "mixlib/shellout"
7
+ require "mixlib/shellout" unless defined?(Mixlib::ShellOut)
9
8
 
10
9
  module Train::Transports
11
10
  class Local < Train.plugin(1)
@@ -112,7 +111,7 @@ module Train::Transports
112
111
  end
113
112
 
114
113
  class WindowsShellRunner
115
- require "json"
114
+ require "json" unless defined?(JSON)
116
115
  require "base64"
117
116
 
118
117
  def initialize(powershell_cmd = "powershell")
@@ -136,9 +135,9 @@ module Train::Transports
136
135
  end
137
136
 
138
137
  class WindowsPipeRunner
139
- require "json"
138
+ require "json" unless defined?(JSON)
140
139
  require "base64"
141
- require "securerandom"
140
+ require "securerandom" unless defined?(SecureRandom)
142
141
 
143
142
  def initialize(powershell_cmd = "powershell")
144
143
  @powershell_cmd = powershell_cmd
@@ -147,7 +146,7 @@ module Train::Transports
147
146
  end
148
147
 
149
148
  # @param cmd The command to execute
150
- # @return Local::ComandResult with stdout, stderr and exitstatus
149
+ # @return Local::CommandResult with stdout, stderr and exitstatus
151
150
  # Note that exitstatus ($?) in PowerShell is boolean, but we use a numeric exit code.
152
151
  # A command that succeeds without setting an exit code will have exitstatus 0
153
152
  # A command that exits with an exit code will have that value as exitstatus
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
3
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
@@ -18,7 +17,7 @@
18
17
  # See the License for the specific language governing permissions and
19
18
  # limitations under the License.
20
19
 
21
- require "net/ssh"
20
+ require "net/ssh" unless defined?(Net::SSH)
22
21
  require "net/scp"
23
22
  require_relative "../errors"
24
23
 
@@ -65,6 +64,9 @@ module Train::Transports
65
64
  option :non_interactive, default: false
66
65
  option :verify_host_key, default: false
67
66
 
67
+ # Allow connecting with older algorithms
68
+ option :append_all_supported_algorithms, default: true
69
+
68
70
  option :compression_level do |opts|
69
71
  # on nil or false: set compression level to 0
70
72
  opts[:compression] ? 6 : 0
@@ -76,7 +78,7 @@ module Train::Transports
76
78
  validate_options(opts)
77
79
  conn_opts = connection_options(opts)
78
80
 
79
- if defined?(@connection) && @connection_options == conn_opts
81
+ if defined?(@connection) && reusable_connection?(conn_opts)
80
82
  reuse_connection(&block)
81
83
  else
82
84
  create_new_connection(conn_opts, &block)
@@ -85,6 +87,13 @@ module Train::Transports
85
87
 
86
88
  private
87
89
 
90
+ def reusable_connection?(conn_opts)
91
+ return false unless @connection_options
92
+
93
+ # Do requested options match their current settings
94
+ @connection_options.all? { |k, v| conn_opts[k] == v }
95
+ end
96
+
88
97
  def validate_options(options)
89
98
  super(options)
90
99
 
@@ -167,6 +176,7 @@ module Train::Transports
167
176
  bastion_user: opts[:bastion_user],
168
177
  bastion_port: opts[:bastion_port],
169
178
  non_interactive: opts[:non_interactive],
179
+ append_all_supported_algorithms: opts[:append_all_supported_algorithms],
170
180
  transport_options: opts,
171
181
  }
172
182
  # disable host key verification. The hash key and value to use
@@ -227,7 +237,7 @@ module Train::Transports
227
237
  # Creates a new SSH Connection instance and save it for potential future
228
238
  # reuse.
229
239
  #
230
- # @param options [Hash] conneciton options
240
+ # @param options [Hash] connection options
231
241
  # @return [Ssh::Connection] an SSH Connection instance
232
242
  # @api private
233
243
  def create_new_connection(options, &block)
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
3
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
@@ -18,9 +17,9 @@
18
17
  # See the License for the specific language governing permissions and
19
18
  # limitations under the License.
20
19
 
21
- require "net/ssh"
20
+ require "net/ssh" unless defined?(Net::SSH)
22
21
  require "net/scp"
23
- require "timeout"
22
+ require "timeout" unless defined?(Timeout)
24
23
 
25
24
  class Train::Transports::SSH
26
25
  # A Connection instance can be generated and re-generated, given new
@@ -202,8 +201,6 @@ class Train::Transports::SSH
202
201
  require "net/ssh/proxy/command"
203
202
  @options[:proxy] = Net::SSH::Proxy::Command.new(generate_proxy_command)
204
203
  end
205
- # Allow older algorithms
206
- @options[:append_all_supported_algorithms] = true
207
204
  Net::SSH.start(@hostname, @username, @options.clone.delete_if { |_key, value| value.nil? })
208
205
  rescue *RESCUE_EXCEPTIONS_ON_ESTABLISH => e
209
206
  if (opts[:retries] -= 1) <= 0
@@ -1,7 +1,6 @@
1
- # encoding: utf-8
2
1
  #
3
2
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
3
 
5
4
  module Train
6
- VERSION = "3.3.1".freeze
5
+ VERSION = "3.3.21".freeze
7
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: train-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.1
4
+ version: 3.3.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef InSpec Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-10 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable