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