r10k 2.0.1 → 2.0.2
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 +8 -8
- data/CHANGELOG.mkd +26 -0
- data/lib/r10k/version.rb +1 -1
- data/lib/shared/puppet_forge/connection.rb +2 -0
- data/lib/shared/puppet_forge/connection/connection_failure.rb +26 -0
- data/lib/shared/puppet_forge/error.rb +6 -0
- data/lib/shared/puppet_forge/v3/module.rb +3 -0
- data/lib/shared/puppet_forge/v3/module_release.rb +6 -1
- data/spec/unit/forge/module_release_spec.rb +1 -0
- data/spec/unit/puppet_forge/connection/connection_failure_spec.rb +28 -0
- data/spec/unit/puppet_forge/v3/module_release_spec.rb +15 -0
- data/spec/unit/puppet_forge/v3/module_spec.rb +8 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjNhZTM2NGM2Y2I5ZWVjMmM3NjZjMTkzZTY4ZjhkNWRmZjNiODA2Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MzY0NGYyYTM3YzdlMDhjZWU2MDkyM2NiMmZlNmYyNzU1ZWZiMDc3ZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YjUyYjMwOWJhOGY2MWI0OWFmYjUyYmY3OGE5NjI4MTE1YjMzMjUzZjgyOTY5
|
10
|
+
OGY3NTIxYWNhMWUyMWY5ZDEwZmM5MGI1NjFkZDJjZjRmYzU3NmZhZmVlNzM0
|
11
|
+
NTgzMjM0ZTM5NGY0OTJjNWJmOWQ1YjJhMTlkOWZiZjNhYThhM2M=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGE4NmFlMTU3YTE2NDY5NTMyYzNmOWNhMjhlNGYzYmQzNjU5MWQwYzNjMDNi
|
14
|
+
NzhmOGQ2YTMyYWM0ZWM3MTk4ZWJhZWQ5OTJjZDYyZDcxMmJiZTA1NjA0NzY0
|
15
|
+
NjMyMTk4Njk0YzBlM2Q3ODI5YWEyZDMxYzU0NTBkZDgxYjU4Mzk=
|
data/CHANGELOG.mkd
CHANGED
@@ -1,6 +1,32 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
=========
|
3
3
|
|
4
|
+
2.0.2
|
5
|
+
-----
|
6
|
+
|
7
|
+
2015/06/18
|
8
|
+
|
9
|
+
This is a maintenance release that improves error messages around installing
|
10
|
+
modules from the Puppet Forge.
|
11
|
+
|
12
|
+
### User notes
|
13
|
+
|
14
|
+
(RK-109) Add context to connection failure errors
|
15
|
+
|
16
|
+
If a connection to the Puppet Forge failed for any reason, the resulting
|
17
|
+
exception would indicate the error type but not the host or proxy host. This
|
18
|
+
made it hard to understand why connections were failing. This has been fixed so
|
19
|
+
that r10k will include the host and optional proxy host in error messages when
|
20
|
+
connections fail.
|
21
|
+
|
22
|
+
(RK-121) Improve error handling for nonexistent Forge modules
|
23
|
+
|
24
|
+
The r10k Puppet Forge connection error handling reports when HTTP requests fail,
|
25
|
+
but would simply print the HTTP status code on failure. For cases where a
|
26
|
+
nonexistent module or module release was queried, r10k now specially handles
|
27
|
+
HTTP 404 status codes and indicates that the module/module release is missing
|
28
|
+
instead of just throwing a generic HTTP error.
|
29
|
+
|
4
30
|
2.0.1
|
5
31
|
-----
|
6
32
|
|
data/lib/r10k/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'shared/puppet_forge/version'
|
2
|
+
require 'shared/puppet_forge/connection/connection_failure'
|
2
3
|
|
3
4
|
require 'faraday'
|
4
5
|
require 'faraday_middleware'
|
@@ -54,6 +55,7 @@ module PuppetForge
|
|
54
55
|
Faraday.new(url, options) do |builder|
|
55
56
|
builder.response(:json, :content_type => /\bjson$/)
|
56
57
|
builder.response(:raise_error)
|
58
|
+
builder.use(:connection_failure)
|
57
59
|
|
58
60
|
builder.adapter(*adapter_args)
|
59
61
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module PuppetForge
|
4
|
+
module Connection
|
5
|
+
# Wrap Faraday connection failures to include the host and optional proxy
|
6
|
+
# in use for the failed connection.
|
7
|
+
class ConnectionFailure < Faraday::Middleware
|
8
|
+
def call(env)
|
9
|
+
@app.call(env)
|
10
|
+
rescue Faraday::ConnectionFailed => e
|
11
|
+
baseurl = env[:url].dup
|
12
|
+
baseurl.path = ''
|
13
|
+
errmsg = "Unable to connect to #{baseurl.to_s}"
|
14
|
+
if proxy = env[:request][:proxy]
|
15
|
+
errmsg << " (using proxy #{proxy.uri.to_s})"
|
16
|
+
end
|
17
|
+
errmsg << ": #{e.message}"
|
18
|
+
m = Faraday::ConnectionFailed.new(errmsg)
|
19
|
+
m.set_backtrace(e.backtrace)
|
20
|
+
raise m
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Faraday::Middleware.register_middleware(:connection_failure => lambda { PuppetForge::Connection::ConnectionFailure })
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'shared/puppet_forge/v3'
|
2
2
|
require 'shared/puppet_forge/v3/module_release'
|
3
3
|
require 'shared/puppet_forge/connection'
|
4
|
+
require 'shared/puppet_forge/error'
|
4
5
|
|
5
6
|
module PuppetForge
|
6
7
|
module V3
|
@@ -41,6 +42,8 @@ module PuppetForge
|
|
41
42
|
end
|
42
43
|
|
43
44
|
releases.reverse
|
45
|
+
rescue Faraday::ResourceNotFound => e
|
46
|
+
raise PuppetForge::ModuleNotFound, "The module #{@full_name} does not exist on #{conn.url_prefix}.", e.backtrace
|
44
47
|
end
|
45
48
|
|
46
49
|
# Get all released versions of this module
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'shared/puppet_forge/v3'
|
2
2
|
require 'shared/puppet_forge/connection'
|
3
|
+
require 'shared/puppet_forge/error'
|
3
4
|
|
4
5
|
module PuppetForge
|
5
6
|
module V3
|
@@ -24,9 +25,11 @@ module PuppetForge
|
|
24
25
|
@version = version
|
25
26
|
end
|
26
27
|
|
27
|
-
# @return [Hash] The complete Forge
|
28
|
+
# @return [Hash] The complete Forge response for this release.
|
28
29
|
def data
|
29
30
|
@data ||= conn.get(resource_url).body
|
31
|
+
rescue Faraday::ResourceNotFound => e
|
32
|
+
raise PuppetForge::ModuleReleaseNotFound, "The module release #{slug} does not exist on #{conn.url_prefix}.", e.backtrace
|
30
33
|
end
|
31
34
|
|
32
35
|
# @return [String] The unique identifier for this module release.
|
@@ -41,6 +44,8 @@ module PuppetForge
|
|
41
44
|
def download(path)
|
42
45
|
resp = conn.get(file_url)
|
43
46
|
path.open('wb') { |fh| fh.write(resp.body) }
|
47
|
+
rescue Faraday::ResourceNotFound => e
|
48
|
+
raise PuppetForge::ModuleReleaseNotFound, "The module release #{slug} does not exist on #{conn.url_prefix}.", e.backtrace
|
44
49
|
end
|
45
50
|
|
46
51
|
# Verify that a downloaded module matches the checksum in the metadata for this release.
|
@@ -56,6 +56,7 @@ describe R10K::Forge::ModuleRelease do
|
|
56
56
|
|
57
57
|
describe '#verify' do
|
58
58
|
it "verifies the module checksum based on the Forge file checksum" do
|
59
|
+
allow(subject.forge_release).to receive(:data).and_return('file_md5' => 'something')
|
59
60
|
expect(subject.forge_release).to receive(:verify).with(download_path)
|
60
61
|
subject.verify
|
61
62
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'shared/puppet_forge/connection/connection_failure'
|
3
|
+
|
4
|
+
describe PuppetForge::Connection::ConnectionFailure do
|
5
|
+
|
6
|
+
subject do
|
7
|
+
Faraday.new('https://my-site.url/some-path') do |builder|
|
8
|
+
builder.use(:connection_failure)
|
9
|
+
|
10
|
+
builder.adapter :test do |stub|
|
11
|
+
stub.get('/connectfail') { raise Faraday::ConnectionFailed.new(SocketError.new("getaddrinfo: Name or service not known"), :hi) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "includes the base URL in the error message" do
|
17
|
+
expect {
|
18
|
+
subject.get('/connectfail')
|
19
|
+
}.to raise_error(Faraday::ConnectionFailed, "Unable to connect to https://my-site.url: getaddrinfo: Name or service not known")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "includes the proxy host in the error message when set" do
|
23
|
+
subject.proxy('https://some-unreachable.proxy:3128')
|
24
|
+
expect {
|
25
|
+
subject.get('/connectfail')
|
26
|
+
}.to raise_error(Faraday::ConnectionFailed, "Unable to connect to https://my-site.url (using proxy https://some-unreachable.proxy:3128): getaddrinfo: Name or service not known")
|
27
|
+
end
|
28
|
+
end
|
@@ -8,6 +8,7 @@ describe PuppetForge::V3::ModuleRelease do
|
|
8
8
|
|
9
9
|
let(:conn) do
|
10
10
|
Faraday.new do |builder|
|
11
|
+
builder.response(:raise_error)
|
11
12
|
builder.adapter :test, faraday_stubs
|
12
13
|
end
|
13
14
|
end
|
@@ -26,6 +27,13 @@ describe PuppetForge::V3::ModuleRelease do
|
|
26
27
|
faraday_stubs.get('/v3/releases/username-modulename-3.1.4') { [200, {}, {'metadata' => 'yep'}] }
|
27
28
|
expect(subject.data).to eq('metadata' => 'yep')
|
28
29
|
end
|
30
|
+
|
31
|
+
it 'raises an error if the module release does not exist' do
|
32
|
+
faraday_stubs.get('/v3/releases/username-modulename-3.1.4') { [404, {}, {'metadata' => 'yep'}] }
|
33
|
+
expect {
|
34
|
+
subject.data
|
35
|
+
}.to raise_error(PuppetForge::ModuleReleaseNotFound, /The module release username-modulename-3\.1\.4 does not exist/)
|
36
|
+
end
|
29
37
|
end
|
30
38
|
|
31
39
|
describe '#download' do
|
@@ -40,6 +48,13 @@ describe PuppetForge::V3::ModuleRelease do
|
|
40
48
|
|
41
49
|
subject.download(path)
|
42
50
|
end
|
51
|
+
|
52
|
+
it 'raises an error if the module release does not exist' do
|
53
|
+
faraday_stubs.get('/v3/files/username-modulename-3.1.4.tar.gz') { [404, {}, 'not found'] }
|
54
|
+
expect {
|
55
|
+
subject.download(Pathname.new('/some/path'))
|
56
|
+
}.to raise_error(PuppetForge::ModuleReleaseNotFound, /The module release username-modulename-3\.1\.4 does not exist/)
|
57
|
+
end
|
43
58
|
end
|
44
59
|
|
45
60
|
describe '#verify' do
|
@@ -7,6 +7,7 @@ describe PuppetForge::V3::Module do
|
|
7
7
|
|
8
8
|
let(:conn) do
|
9
9
|
Faraday.new do |builder|
|
10
|
+
builder.response(:raise_error)
|
10
11
|
builder.adapter :test, faraday_stubs
|
11
12
|
end
|
12
13
|
end
|
@@ -56,6 +57,13 @@ describe PuppetForge::V3::Module do
|
|
56
57
|
faraday_stubs.get('/v3/modules/authorname-modulename') { [200, {}, releases_with_deletions] }
|
57
58
|
expect(subject.versions).to eq ["0.3.0"]
|
58
59
|
end
|
60
|
+
|
61
|
+
it "raises an error when the module does not exist" do
|
62
|
+
faraday_stubs.get('/v3/modules/authorname-modulename') { [404, {}, ''] }
|
63
|
+
expect {
|
64
|
+
subject.versions
|
65
|
+
}.to raise_error(PuppetForge::ModuleNotFound, /The module authorname-modulename does not exist/)
|
66
|
+
end
|
59
67
|
end
|
60
68
|
|
61
69
|
describe '#latest_version' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r10k
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrien Thebo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colored
|
@@ -400,6 +400,7 @@ files:
|
|
400
400
|
- lib/r10k/version.rb
|
401
401
|
- lib/shared/puppet/module_tool/metadata.rb
|
402
402
|
- lib/shared/puppet_forge/connection.rb
|
403
|
+
- lib/shared/puppet_forge/connection/connection_failure.rb
|
403
404
|
- lib/shared/puppet_forge/error.rb
|
404
405
|
- lib/shared/puppet_forge/tar.rb
|
405
406
|
- lib/shared/puppet_forge/tar/mini.rb
|
@@ -470,6 +471,7 @@ files:
|
|
470
471
|
- spec/unit/module_repository/forge_spec.rb
|
471
472
|
- spec/unit/module_spec.rb
|
472
473
|
- spec/unit/puppet/module_tool/metadata_spec.rb
|
474
|
+
- spec/unit/puppet_forge/connection/connection_failure_spec.rb
|
473
475
|
- spec/unit/puppet_forge/connection_spec.rb
|
474
476
|
- spec/unit/puppet_forge/tar/mini_spec.rb
|
475
477
|
- spec/unit/puppet_forge/tar_spec.rb
|
@@ -577,6 +579,7 @@ test_files:
|
|
577
579
|
- spec/unit/module/git_spec.rb
|
578
580
|
- spec/unit/logging_spec.rb
|
579
581
|
- spec/unit/puppet_forge/tar_spec.rb
|
582
|
+
- spec/unit/puppet_forge/connection/connection_failure_spec.rb
|
580
583
|
- spec/unit/puppet_forge/v3/module_spec.rb
|
581
584
|
- spec/unit/puppet_forge/v3/module_release_spec.rb
|
582
585
|
- spec/unit/puppet_forge/unpacker_spec.rb
|