train 1.4.29 → 1.4.31
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 +4 -4
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +18 -12
- data/Gemfile +7 -0
- data/lib/train.rb +22 -9
- data/lib/train/errors.rb +5 -0
- data/lib/train/platforms/detect/helpers/os_common.rb +1 -1
- data/lib/train/plugins/base_connection.rb +3 -1
- data/lib/train/transports/aws.rb +1 -1
- data/lib/train/transports/azure.rb +1 -1
- data/lib/train/transports/gcp.rb +1 -1
- data/lib/train/transports/helpers/azure/file_credentials.rb +1 -0
- data/lib/train/transports/vmware.rb +1 -1
- data/lib/train/version.rb +1 -1
- data/test/fixtures/gempath/gems/train-gem-fixture-0.1.0/README.md +1 -0
- data/test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture.rb +2 -0
- data/test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture/transport.rb +7 -0
- data/test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture/version.rb +5 -0
- data/test/fixtures/gempath/gems/train-gem-fixture-0.1.0/train-gem-fixture.gemspec +34 -0
- data/test/unit/platforms/detect/uuid_test.rb +1 -1
- data/test/unit/plugins/connection_test.rb +3 -3
- data/test/unit/train_test.rb +16 -3
- data/test/unit/transports/helpers/azure/file_credentials_test.rb +8 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41dd0a819427f0fdb0394992ca48fd80d9d67dd45d7a6c666472f48cb79cacb0
|
4
|
+
data.tar.gz: 8c05af271415f0165a1a68b2495832ba89f84864dcb5c26e498fd48e2cc4d43f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55719a930b672cab82cfeb76aebf0fa26643a75de1c61d618f65236d291682786a786376679a61c5533940c34391cb10d400f85852cd07b1e8d01b29f682b3f4
|
7
|
+
data.tar.gz: ab0665695a28b1e86b21fb83d2093907bb7850870603bba2fd35efb21b1b37c7e101a39dd6b4814cfea8d518ac762931275a9f578dad60c577fefc504f4ec1c0
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,28 +1,34 @@
|
|
1
|
-
<!-- latest_release 1.4.
|
2
|
-
## [v1.4.
|
1
|
+
<!-- latest_release 1.4.31 -->
|
2
|
+
## [v1.4.31](https://github.com/inspec/train/tree/v1.4.31) (2018-08-16)
|
3
3
|
|
4
4
|
#### Merged Pull Requests
|
5
|
-
-
|
5
|
+
- Enable using rubygems as plugins [#335](https://github.com/inspec/train/pull/335) ([clintoncwolfe](https://github.com/clintoncwolfe))
|
6
6
|
<!-- latest_release -->
|
7
7
|
|
8
|
-
<!-- release_rollup since=1.4.
|
9
|
-
### Changes since 1.4.
|
10
|
-
|
11
|
-
#### Features & Enhancements
|
12
|
-
- Pulls file credentials parsing out of Azure class [#324](https://github.com/inspec/train/pull/324) ([dmccown](https://github.com/dmccown)) <!-- 1.4.27 -->
|
8
|
+
<!-- release_rollup since=1.4.29 -->
|
9
|
+
### Changes since 1.4.29 release
|
13
10
|
|
14
11
|
#### Merged Pull Requests
|
15
|
-
-
|
16
|
-
-
|
17
|
-
- Modify checksum logic to use system binaries [#251](https://github.com/inspec/train/pull/251) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.4.26 -->
|
12
|
+
- Enable using rubygems as plugins [#335](https://github.com/inspec/train/pull/335) ([clintoncwolfe](https://github.com/clintoncwolfe)) <!-- 1.4.31 -->
|
13
|
+
- Fixes an issue where the credential file was nil [#337](https://github.com/inspec/train/pull/337) ([dmccown](https://github.com/dmccown)) <!-- 1.4.30 -->
|
18
14
|
<!-- release_rollup -->
|
19
15
|
|
20
16
|
<!-- latest_stable_release -->
|
17
|
+
## [v1.4.29](https://github.com/inspec/train/tree/v1.4.29) (2018-08-15)
|
18
|
+
|
19
|
+
#### Features & Enhancements
|
20
|
+
- Pulls file credentials parsing out of Azure class [#324](https://github.com/inspec/train/pull/324) ([dmccown](https://github.com/dmccown))
|
21
|
+
|
22
|
+
#### Merged Pull Requests
|
23
|
+
- Modify checksum logic to use system binaries [#251](https://github.com/inspec/train/pull/251) ([jerryaldrichiii](https://github.com/jerryaldrichiii))
|
24
|
+
- Require Ruby 2.0 and allow net-ssh 5.0 [#334](https://github.com/inspec/train/pull/334) ([tas50](https://github.com/tas50))
|
25
|
+
- Add non_interactive support for SSH [#336](https://github.com/inspec/train/pull/336) ([marcparadise](https://github.com/marcparadise))
|
26
|
+
<!-- latest_stable_release -->
|
27
|
+
|
21
28
|
## [v1.4.25](https://github.com/inspec/train/tree/v1.4.25) (2018-08-01)
|
22
29
|
|
23
30
|
#### Merged Pull Requests
|
24
31
|
- Remove not needed google-cloud dependency (see #328) and correct GCP … [#329](https://github.com/inspec/train/pull/329) ([skpaterson](https://github.com/skpaterson))
|
25
|
-
<!-- latest_stable_release -->
|
26
32
|
|
27
33
|
## [v1.4.24](https://github.com/inspec/train/tree/v1.4.24) (2018-07-26)
|
28
34
|
|
data/Gemfile
CHANGED
@@ -19,6 +19,13 @@ group :test do
|
|
19
19
|
gem 'rubocop', '~> 0.36.0'
|
20
20
|
gem 'simplecov', '~> 0.10'
|
21
21
|
gem 'concurrent-ruby', '~> 1.0'
|
22
|
+
gem 'pry-byebug'
|
23
|
+
gem 'm'
|
24
|
+
# This is not a true gem installation
|
25
|
+
# (Gem::Specification.find_by_path('train-gem-fixture') will return nil)
|
26
|
+
# but it's close enough to show the gempath handler can find a plugin
|
27
|
+
# See test/unit/
|
28
|
+
gem 'train-gem-fixture', path: 'test/fixtures/gempath/gems'
|
22
29
|
end
|
23
30
|
|
24
31
|
group :integration do
|
data/lib/train.rb
CHANGED
@@ -36,16 +36,29 @@ module Train
|
|
36
36
|
#
|
37
37
|
# @param [String] name of the plugin
|
38
38
|
# @return [Train::Transport] the transport plugin
|
39
|
-
def self.load_transport(
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
def self.load_transport(transport_name)
|
40
|
+
transport_name = transport_name.to_s
|
41
|
+
transport_class = Train::Plugins.registry[transport_name]
|
42
|
+
return transport_class unless transport_class.nil?
|
43
|
+
|
44
|
+
# Try to load the transport name from the core transports...
|
45
|
+
require 'train/transports/' + transport_name
|
46
|
+
return Train::Plugins.registry[transport_name]
|
46
47
|
rescue LoadError => _
|
47
|
-
|
48
|
-
|
48
|
+
begin
|
49
|
+
# If it's not in the core transports, try loading from a train plugin gem.
|
50
|
+
gem_name = 'train-' + transport_name
|
51
|
+
require gem_name
|
52
|
+
return Train::Plugins.registry[transport_name]
|
53
|
+
# rubocop: disable Lint/HandleExceptions
|
54
|
+
rescue LoadError => _
|
55
|
+
# rubocop: enable Lint/HandleExceptions
|
56
|
+
# Intentionally empty rescue - we're handling it below anyway
|
57
|
+
end
|
58
|
+
|
59
|
+
ex = Train::PluginLoadError.new("Can't find train plugin #{transport_name}. Please install it first.")
|
60
|
+
ex.transport_name = transport_name
|
61
|
+
raise ex
|
49
62
|
end
|
50
63
|
|
51
64
|
# Resolve target configuration in URI-scheme into
|
data/lib/train/errors.rb
CHANGED
@@ -23,6 +23,11 @@ module Train
|
|
23
23
|
# errors.
|
24
24
|
class UserError < Error; end
|
25
25
|
|
26
|
+
# We could not load a plugin, because of a user error
|
27
|
+
class PluginLoadError < UserError
|
28
|
+
attr_accessor :transport_name
|
29
|
+
end
|
30
|
+
|
26
31
|
# Base exception class for all exceptions that are caused by incorrect use
|
27
32
|
# of an API.
|
28
33
|
class ClientError < Error; end
|
@@ -5,7 +5,7 @@ require 'train/platforms/detect/helpers/os_windows'
|
|
5
5
|
require 'rbconfig'
|
6
6
|
|
7
7
|
module Train::Platforms::Detect::Helpers
|
8
|
-
module OSCommon
|
8
|
+
module OSCommon
|
9
9
|
include Train::Platforms::Detect::Helpers::Linux
|
10
10
|
include Train::Platforms::Detect::Helpers::Windows
|
11
11
|
|
@@ -77,7 +77,7 @@ class Train::Plugins::Transport
|
|
77
77
|
false
|
78
78
|
end
|
79
79
|
|
80
|
-
def
|
80
|
+
def force_platform!(name, platform_details = nil)
|
81
81
|
plat = Train::Platforms.name(name)
|
82
82
|
plat.backend = self
|
83
83
|
plat.platform = platform_details unless platform_details.nil?
|
@@ -86,6 +86,8 @@ class Train::Plugins::Transport
|
|
86
86
|
plat
|
87
87
|
end
|
88
88
|
|
89
|
+
alias direct_platform force_platform!
|
90
|
+
|
89
91
|
def family_hierarchy(plat)
|
90
92
|
plat.families.each_with_object([]) do |(k, _v), memo|
|
91
93
|
memo << k.name
|
data/lib/train/transports/aws.rb
CHANGED
data/lib/train/transports/gcp.rb
CHANGED
@@ -12,6 +12,7 @@ module Train::Transports
|
|
12
12
|
DEFAULT_FILE = ::File.join(Dir.home, '.azure', 'credentials')
|
13
13
|
|
14
14
|
def self.parse(subscription_id: nil, credentials_file: DEFAULT_FILE, **_)
|
15
|
+
credentials_file = DEFAULT_FILE if credentials_file.nil?
|
15
16
|
return {} unless ::File.readable?(credentials_file)
|
16
17
|
credentials = IniFile.load(::File.expand_path(credentials_file))
|
17
18
|
subscription_id = parser(subscription_id, ENV['AZURE_SUBSCRIPTION_NUMBER'], credentials).subscription_id
|
data/lib/train/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
This is a very simple train transport plugin, laid out as though it were an installed gem. It is not a good example to use for learning, nor a good base for starting your own plugin - it's intended for for use during the testing of Train.
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "train-gem-fixture"
|
7
|
+
spec.version = '0.1.0'
|
8
|
+
spec.authors = ["Inspec core engineering team"]
|
9
|
+
spec.email = ["hello@chef.io"]
|
10
|
+
|
11
|
+
spec.summary = %q{Test train plugin, packaged as a local gem}
|
12
|
+
spec.description = %q{Test train plugin, packaged as a local gem}
|
13
|
+
spec.homepage = "https://github.com/inspec/train"
|
14
|
+
|
15
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
16
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
17
|
+
if spec.respond_to?(:metadata)
|
18
|
+
spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
19
|
+
else
|
20
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
21
|
+
"public gem pushes."
|
22
|
+
end
|
23
|
+
|
24
|
+
spec.files = %w{
|
25
|
+
README.md
|
26
|
+
lib/train-gem-fixture.rb
|
27
|
+
lib/train-gem-fixture/version.rb
|
28
|
+
lib/train-gem-fixture/transport.rb
|
29
|
+
}
|
30
|
+
spec.executables = []
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
|
33
|
+
# No deps
|
34
|
+
end
|
@@ -44,7 +44,7 @@ describe 'v1 Connection Plugin' do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'provides direct platform' do
|
47
|
-
plat = connection.
|
47
|
+
plat = connection.force_platform!('mac_os_x')
|
48
48
|
plat.name.must_equal 'mac_os_x'
|
49
49
|
plat.linux?.must_equal false
|
50
50
|
plat.cloud?.must_equal false
|
@@ -54,7 +54,7 @@ describe 'v1 Connection Plugin' do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'provides api direct platform' do
|
57
|
-
plat = connection.
|
57
|
+
plat = connection.force_platform!('aws')
|
58
58
|
plat.name.must_equal 'aws'
|
59
59
|
plat.linux?.must_equal false
|
60
60
|
plat.cloud?.must_equal true
|
@@ -66,7 +66,7 @@ describe 'v1 Connection Plugin' do
|
|
66
66
|
aws_version = Gem.loaded_specs['aws-sdk'].version
|
67
67
|
aws_version = "aws-sdk-v#{aws_version}"
|
68
68
|
details = { release: aws_version }
|
69
|
-
plat = connection.
|
69
|
+
plat = connection.force_platform!('aws', details)
|
70
70
|
plat.name.must_equal 'aws'
|
71
71
|
plat.release.must_equal aws_version
|
72
72
|
plat[:release].must_equal aws_version
|
data/test/unit/train_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
#
|
3
3
|
# Author:: Dominik Richter (<dominik.richter@gmail.com>)
|
4
|
-
|
4
|
+
require_relative 'helper'
|
5
5
|
|
6
6
|
describe Train do
|
7
7
|
before do
|
@@ -11,9 +11,10 @@ describe Train do
|
|
11
11
|
describe '#create' do
|
12
12
|
it 'raises an error if the plugin isnt found' do
|
13
13
|
proc { Train.create('missing') }.must_raise Train::UserError
|
14
|
+
proc { Train.create('missing') }.must_raise Train::PluginLoadError
|
14
15
|
end
|
15
16
|
|
16
|
-
it '
|
17
|
+
it 'loads a core plugin if it isnt in the registry yet via symbol' do
|
17
18
|
Kernel.stub :require, true do
|
18
19
|
ex = Class.new(Train.plugin 1) { name 'existing' }
|
19
20
|
train = Train.create(:existing)
|
@@ -21,18 +22,30 @@ describe Train do
|
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
it '
|
25
|
+
it 'loads a core plugin if it isnt in the registry yet via string' do
|
25
26
|
Kernel.stub :require, true do
|
26
27
|
ex = Class.new(Train.plugin 1) { name 'existing' }
|
27
28
|
train = Train.create('existing')
|
28
29
|
train.class.must_equal ex
|
29
30
|
end
|
30
31
|
end
|
32
|
+
|
33
|
+
it 'loads a gem plugin if it isnt in the registry yet via string' do
|
34
|
+
# The 'train-gem-fixture' gem is located in test/fixtures/gempath/gems and is
|
35
|
+
# added to the gempath via Bundler. The key difference is that it isn't under
|
36
|
+
# lib/train/trainsports, and Train will need to pre-pend 'train-' to the
|
37
|
+
# transport name to get the gem name.
|
38
|
+
transport = Train.create('gem-fixture')
|
39
|
+
# Normally one would call transport.class.name, but that's been overridden to be a write-only DSL method
|
40
|
+
# So use to_s
|
41
|
+
transport.class.to_s.must_equal 'TrainTransports::GemFixture'
|
42
|
+
end
|
31
43
|
end
|
32
44
|
|
33
45
|
describe '#options' do
|
34
46
|
it 'raises exception if a given transport plugin isnt found' do
|
35
47
|
proc { Train.options('missing') }.must_raise Train::UserError
|
48
|
+
proc { Train.options('missing') }.must_raise Train::PluginLoadError
|
36
49
|
end
|
37
50
|
|
38
51
|
it 'provides empty options of a transport plugin' do
|
@@ -38,6 +38,14 @@ describe 'parse_credentials_file' do
|
|
38
38
|
|
39
39
|
let(:options) { { credentials_file: cred_file_multiple_entries.path } }
|
40
40
|
|
41
|
+
it 'handles a nil file' do
|
42
|
+
options[:credentials_file] = nil
|
43
|
+
|
44
|
+
result = Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
45
|
+
|
46
|
+
assert_empty(result)
|
47
|
+
end
|
48
|
+
|
41
49
|
it 'returns empty hash when no credentials file detected' do
|
42
50
|
result = Train::Transports::Helpers::Azure::FileCredentials.parse({})
|
43
51
|
|
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: 1.4.
|
4
|
+
version: 1.4.31
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -265,6 +265,11 @@ files:
|
|
265
265
|
- lib/train/transports/winrm.rb
|
266
266
|
- lib/train/transports/winrm_connection.rb
|
267
267
|
- lib/train/version.rb
|
268
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/README.md
|
269
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture.rb
|
270
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture/transport.rb
|
271
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture/version.rb
|
272
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/train-gem-fixture.gemspec
|
268
273
|
- test/integration/.kitchen.yml
|
269
274
|
- test/integration/Berksfile
|
270
275
|
- test/integration/bootstrap.sh
|
@@ -360,6 +365,11 @@ signing_key:
|
|
360
365
|
specification_version: 4
|
361
366
|
summary: Transport interface to talk to different backends.
|
362
367
|
test_files:
|
368
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/README.md
|
369
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture.rb
|
370
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture/transport.rb
|
371
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/lib/train-gem-fixture/version.rb
|
372
|
+
- test/fixtures/gempath/gems/train-gem-fixture-0.1.0/train-gem-fixture.gemspec
|
363
373
|
- test/integration/.kitchen.yml
|
364
374
|
- test/integration/Berksfile
|
365
375
|
- test/integration/bootstrap.sh
|