fleet-api 0.9.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +3 -8
- data/README.md +25 -27
- data/fleet-api.gemspec +1 -2
- data/lib/fleet/client/machines.rb +1 -2
- data/lib/fleet/client/state.rb +3 -8
- data/lib/fleet/client/unit.rb +16 -13
- data/lib/fleet/client.rb +39 -79
- data/lib/fleet/configuration.rb +5 -10
- data/lib/fleet/connection.rb +21 -12
- data/lib/fleet/error.rb +1 -2
- data/lib/fleet/request.rb +39 -36
- data/lib/fleet/service_definition.rb +20 -37
- data/lib/fleet/version.rb +1 -1
- data/spec/fleet/client/machines_spec.rb +1 -2
- data/spec/fleet/client/state_spec.rb +2 -25
- data/spec/fleet/client/unit_spec.rb +35 -20
- data/spec/fleet/client_spec.rb +84 -184
- data/spec/fleet/configuration_spec.rb +6 -6
- data/spec/fleet/connection_spec.rb +51 -47
- data/spec/fleet/error_spec.rb +1 -7
- data/spec/fleet/request_spec.rb +52 -85
- data/spec/fleet/service_definition_spec.rb +10 -51
- data/spec/fleet_spec.rb +8 -14
- metadata +7 -27
- data/lib/fleet/client/job.rb +0 -44
- data/lib/fleet/middleware/response/raise_error.rb +0 -37
- data/spec/fleet/client/job_spec.rb +0 -123
- data/spec/fleet/middleware/response/raise_error_spec.rb +0 -90
@@ -2,73 +2,77 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Fleet::Connection do
|
4
4
|
|
5
|
-
describe 'registered middleware' do
|
6
|
-
|
7
|
-
subject { Fleet::Client.new.connection }
|
8
|
-
|
9
|
-
handlers = [
|
10
|
-
Faraday::Request::UrlEncoded,
|
11
|
-
FaradayMiddleware::ParseJson,
|
12
|
-
Fleet::Middleware::Response::RaiseError,
|
13
|
-
FaradayMiddleware::FollowRedirects,
|
14
|
-
Faraday::Adapter::NetHttp
|
15
|
-
]
|
16
|
-
|
17
|
-
handlers.each do |handler|
|
18
|
-
it { expect(subject.builder.handlers).to include handler }
|
19
|
-
end
|
20
|
-
|
21
|
-
it "includes exactly #{handlers.count} handlers" do
|
22
|
-
expect(subject.builder.handlers.count).to eql handlers.count
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
5
|
describe 'connection options' do
|
27
6
|
|
28
|
-
let(:
|
29
|
-
let(:
|
30
|
-
let(:proxy) { 'http://proxy.com' }
|
7
|
+
let(:open_timeout) { 30 }
|
8
|
+
let(:read_timeout) { 40 }
|
31
9
|
|
32
10
|
subject do
|
33
11
|
Fleet::Client.new(
|
34
|
-
|
35
|
-
|
36
|
-
proxy: proxy).connection
|
12
|
+
open_timeout: open_timeout,
|
13
|
+
read_timeout: read_timeout).connection
|
37
14
|
end
|
38
15
|
|
39
|
-
describe '
|
40
|
-
it 'matches the
|
41
|
-
expect(subject.
|
16
|
+
describe 'open_timeout' do
|
17
|
+
it 'matches the the specified timeout value' do
|
18
|
+
expect(subject.data[:connect_timeout]).to eq open_timeout
|
42
19
|
end
|
43
20
|
end
|
44
21
|
|
45
|
-
describe '
|
46
|
-
it 'matches the
|
47
|
-
expect(subject.
|
22
|
+
describe 'read_timeout' do
|
23
|
+
it 'matches the the specified timeout value' do
|
24
|
+
expect(subject.data[:read_timeout]).to eq read_timeout
|
48
25
|
end
|
49
26
|
end
|
50
27
|
|
51
|
-
|
52
|
-
|
53
|
-
|
28
|
+
context 'when URL is HTTP' do
|
29
|
+
let(:url) { 'http://foo.com/bar' }
|
30
|
+
|
31
|
+
subject do
|
32
|
+
Fleet::Client.new(fleet_api_url: url).connection
|
33
|
+
end
|
34
|
+
describe 'scheme' do
|
35
|
+
it 'matches the scheme of the URL' do
|
36
|
+
expect(subject.data[:scheme]).to eq 'http'
|
37
|
+
end
|
54
38
|
end
|
55
|
-
end
|
56
39
|
|
57
|
-
|
58
|
-
|
59
|
-
|
40
|
+
describe 'host' do
|
41
|
+
it 'matches the host of the URL' do
|
42
|
+
expect(subject.data[:host]).to eq 'foo.com'
|
43
|
+
end
|
60
44
|
end
|
61
|
-
end
|
62
45
|
|
63
|
-
|
64
|
-
|
65
|
-
|
46
|
+
describe 'port' do
|
47
|
+
it 'matches the port of the URL' do
|
48
|
+
expect(subject.data[:port]).to eq 80
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'prefix' do
|
53
|
+
it 'matches the path of the URL' do
|
54
|
+
expect(subject.data[:path]).to eq '/bar'
|
55
|
+
end
|
66
56
|
end
|
67
57
|
end
|
68
58
|
|
69
|
-
|
70
|
-
|
71
|
-
|
59
|
+
context 'when URL is UNIX' do
|
60
|
+
let(:url) { 'unix:///foo/bar.socket' }
|
61
|
+
|
62
|
+
subject do
|
63
|
+
Fleet::Client.new(fleet_api_url: url).connection
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'scheme' do
|
67
|
+
it 'matches the scheme of the URL' do
|
68
|
+
expect(subject.data[:scheme]).to eq 'unix'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'socket' do
|
73
|
+
it 'matches the port of the URL' do
|
74
|
+
expect(subject.data[:socket]).to eq '/foo/bar.socket'
|
75
|
+
end
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
data/spec/fleet/error_spec.rb
CHANGED
@@ -4,13 +4,11 @@ describe Fleet::Error do
|
|
4
4
|
|
5
5
|
let(:message) { 'some message' }
|
6
6
|
let(:error_code) { 12345 }
|
7
|
-
let(:cause) { 'user error' }
|
8
7
|
|
9
|
-
subject { Fleet::Error.new(message, error_code
|
8
|
+
subject { Fleet::Error.new(message, error_code) }
|
10
9
|
|
11
10
|
it { should respond_to(:message) }
|
12
11
|
it { should respond_to(:error_code) }
|
13
|
-
it { should respond_to(:cause) }
|
14
12
|
|
15
13
|
describe '#initialize' do
|
16
14
|
|
@@ -21,9 +19,5 @@ describe Fleet::Error do
|
|
21
19
|
it 'saves the passed-in error code' do
|
22
20
|
expect(subject.error_code).to eq error_code
|
23
21
|
end
|
24
|
-
|
25
|
-
it 'saves the passed-in cause' do
|
26
|
-
expect(subject.cause).to eq cause
|
27
|
-
end
|
28
22
|
end
|
29
23
|
end
|
data/spec/fleet/request_spec.rb
CHANGED
@@ -4,124 +4,91 @@ describe Fleet::Request do
|
|
4
4
|
|
5
5
|
subject { Fleet::Client.new }
|
6
6
|
|
7
|
-
let(:path) { '/
|
8
|
-
|
9
|
-
let(:request) do
|
10
|
-
double(:request,
|
11
|
-
options: {},
|
12
|
-
headers: {},
|
13
|
-
params: {},
|
14
|
-
'headers=' => nil,
|
15
|
-
'path=' => nil)
|
16
|
-
end
|
7
|
+
let(:path) { '/foo bar@' }
|
17
8
|
|
18
9
|
let(:response) do
|
19
|
-
double(:response, body: 'foo')
|
10
|
+
double(:response, body: '{"name":"foo"}', status: 200)
|
20
11
|
end
|
21
12
|
|
22
13
|
let(:connection) { double(:connection) }
|
23
14
|
|
24
15
|
before do
|
25
|
-
allow(connection).to receive(:send).
|
16
|
+
allow(connection).to receive(:send).and_return(response)
|
26
17
|
allow(subject).to receive(:connection).and_return(connection)
|
27
18
|
end
|
28
19
|
|
29
|
-
|
30
|
-
|
31
|
-
context "##{method}" do
|
20
|
+
describe '#get' do
|
32
21
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
22
|
+
let(:options) do
|
23
|
+
{ foo: 'bar' }
|
24
|
+
end
|
37
25
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
subject.send(method, path, {}, headers)
|
42
|
-
end
|
26
|
+
it 'invokes #get on the connection with the correct params' do
|
27
|
+
opts = { path: '/foo%20bar%40', query: options }
|
28
|
+
expect(connection).to receive(:send).with(:get, opts)
|
43
29
|
|
44
|
-
|
45
|
-
|
46
|
-
end
|
30
|
+
subject.send(:get, path, options)
|
31
|
+
end
|
47
32
|
|
48
|
-
|
33
|
+
it 'returns the parsed response body' do
|
34
|
+
expect(subject.send(:get, path, options)).to eq('name' => 'foo')
|
35
|
+
end
|
49
36
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
37
|
+
context 'when there is a SocketError' do
|
38
|
+
before do
|
39
|
+
allow(connection).to receive(:send)
|
40
|
+
.and_raise(Excon::Errors::SocketError, Excon::Errors::Error.new('oops'))
|
41
|
+
end
|
54
42
|
|
55
|
-
|
56
|
-
|
57
|
-
end
|
43
|
+
it 'raises a Fleet::ConnectionError' do
|
44
|
+
expect { subject.send(:get, path, options) }.to raise_error(Fleet::ConnectionError)
|
58
45
|
end
|
59
46
|
end
|
60
|
-
end
|
61
|
-
|
62
|
-
[:get, :delete, :head].each do |method|
|
63
|
-
|
64
|
-
context "##{method}" do
|
65
47
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
options = { a: :b }
|
70
|
-
expect(request).to receive(:params=).with(options)
|
71
|
-
subject.send(method, path, options)
|
72
|
-
end
|
48
|
+
context 'when a non-200 status code is returned' do
|
49
|
+
let(:response) do
|
50
|
+
double(:response, body: '{"error": {"message": "oops", "code": "400"}}', status: 400)
|
73
51
|
end
|
74
52
|
|
75
|
-
|
76
|
-
|
77
|
-
it 'does not set options on the request' do
|
78
|
-
expect(request).to_not receive(:params=)
|
79
|
-
subject.send(method, path)
|
80
|
-
end
|
53
|
+
it 'raises a Fleet::ConnectionError' do
|
54
|
+
expect { subject.send(:get, path, options) }.to raise_error(Fleet::BadRequest, 'oops')
|
81
55
|
end
|
82
56
|
end
|
83
57
|
end
|
84
58
|
|
85
|
-
|
86
|
-
|
87
|
-
context "##{method}" do
|
59
|
+
describe '#put' do
|
88
60
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
options = { a: :b }
|
93
|
-
expect(request).to receive(:body=).with(options)
|
94
|
-
subject.send(method, path, options)
|
95
|
-
end
|
96
|
-
end
|
61
|
+
let(:options) do
|
62
|
+
{ foo: 'bar' }
|
63
|
+
end
|
97
64
|
|
98
|
-
|
65
|
+
it 'invokes #put on the connection with the correct params' do
|
66
|
+
opts = {
|
67
|
+
path: '/foo%20bar%40',
|
68
|
+
headers: { 'Content-Type' => 'application/json' },
|
69
|
+
body: JSON.dump(options)
|
70
|
+
}
|
71
|
+
expect(connection).to receive(:send).with(:put, opts)
|
99
72
|
|
100
|
-
|
101
|
-
|
102
|
-
subject.send(method, path)
|
103
|
-
end
|
104
|
-
end
|
73
|
+
subject.send(:put, path, options)
|
74
|
+
end
|
105
75
|
|
106
|
-
|
107
|
-
|
76
|
+
it 'returns true' do
|
77
|
+
expect(subject.send(:put, path, options)).to eq(true)
|
78
|
+
end
|
79
|
+
end
|
108
80
|
|
109
|
-
|
110
|
-
allow(request).to receive(:params=)
|
111
|
-
allow(request).to receive(:body=)
|
112
|
-
end
|
81
|
+
describe '#delete' do
|
113
82
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
end
|
83
|
+
it 'invokes #get on the connection with the correct params' do
|
84
|
+
opts = { path: '/foo%20bar%40' }
|
85
|
+
expect(connection).to receive(:send).with(:delete, opts)
|
118
86
|
|
119
|
-
|
120
|
-
|
121
|
-
subject.send(method, path, options)
|
122
|
-
end
|
123
|
-
end
|
87
|
+
subject.send(:delete, path, nil)
|
88
|
+
end
|
124
89
|
|
90
|
+
it 'returns true' do
|
91
|
+
expect(subject.send(:delete, path, nil)).to eq(true)
|
125
92
|
end
|
126
93
|
end
|
127
94
|
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Fleet::ServiceDefinition do
|
4
4
|
|
5
|
-
let(:name) { '
|
5
|
+
let(:name) { 'foo.service' }
|
6
6
|
|
7
7
|
let(:service_hash) do
|
8
8
|
{
|
@@ -16,64 +16,23 @@ describe Fleet::ServiceDefinition do
|
|
16
16
|
}
|
17
17
|
end
|
18
18
|
|
19
|
-
subject { described_class.new(name) }
|
20
|
-
|
21
|
-
it { should respond_to :name }
|
22
|
-
|
23
|
-
describe '#initialize' do
|
24
|
-
|
25
|
-
subject { described_class.new(name) }
|
26
|
-
|
27
|
-
describe 'name' do
|
28
|
-
it 'should equal the passed-in name' do
|
29
|
-
expect(subject.name).to eq name
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
19
|
describe '#to_unit' do
|
35
20
|
|
36
|
-
subject { described_class.new(
|
21
|
+
subject { described_class.new(service_hash) }
|
37
22
|
|
38
23
|
it 'provides a fleet formatted unit definition' do
|
39
24
|
|
40
|
-
raw = <<UNIT_FILE
|
41
|
-
[Unit]
|
42
|
-
Description=#{service_hash['Unit']['Description']}
|
43
|
-
|
44
|
-
[Service]
|
45
|
-
ExecStartPre=#{service_hash['Service']['ExecStartPre'].first}
|
46
|
-
ExecStartPre=#{service_hash['Service']['ExecStartPre'].last}
|
47
|
-
ExecStart=#{service_hash['Service']['ExecStart']}
|
48
|
-
UNIT_FILE
|
49
|
-
|
50
|
-
expected = { 'Raw' => raw }
|
51
|
-
|
52
|
-
expect(subject.to_unit).to eq expected
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '#to_job' do
|
57
|
-
|
58
|
-
subject { described_class.new(name, service_hash) }
|
59
|
-
|
60
|
-
it 'generates the appropriate job definition' do
|
61
|
-
|
62
25
|
expected = {
|
63
|
-
|
64
|
-
|
26
|
+
"name" => name,
|
27
|
+
"options"=> [
|
28
|
+
{ "section" => "Unit", "name" => "Description", "value" => "infinite loop"},
|
29
|
+
{ "section" => "Service", "name" => "ExecStartPre", "value" => "foo" },
|
30
|
+
{ "section" => "Service", "name" => "ExecStartPre", "value" => "bar" },
|
31
|
+
{ "section" => "Service", "name" => "ExecStart", "value" => "/bin/bash -c \"while true; do sleep 1; done\"" }
|
32
|
+
]
|
65
33
|
}
|
66
34
|
|
67
|
-
expect(subject.
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe '#sha1' do
|
72
|
-
|
73
|
-
subject { described_class.new(name, service_hash) }
|
74
|
-
|
75
|
-
it 'generates the appropriate sha1 hash' do
|
76
|
-
expect(subject.sha1).to eq 'ada3139c17b806df4df0d0e6ee36b3c95093e459'
|
35
|
+
expect(subject.to_unit(name)).to eq expected
|
77
36
|
end
|
78
37
|
end
|
79
38
|
end
|
data/spec/fleet_spec.rb
CHANGED
@@ -38,15 +38,21 @@ describe Fleet do
|
|
38
38
|
let(:url) { 'http://foo.com/bar' }
|
39
39
|
|
40
40
|
before do
|
41
|
-
stub_const('Fleet::Configuration::
|
41
|
+
stub_const('Fleet::Configuration::DEFAULT_FLEET_API_URL', url)
|
42
42
|
Fleet.reset
|
43
43
|
end
|
44
44
|
|
45
|
-
it 'defaults to the value of
|
45
|
+
it 'defaults to the value of DEFAULT_FLEET_API_URL' do
|
46
46
|
expect(Fleet.fleet_api_url).to eq url
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
describe '.fleet_api_version' do
|
51
|
+
it 'defaults to v1' do
|
52
|
+
expect(Fleet.fleet_api_version).to eq 'v1'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
50
56
|
describe '.open_timeout' do
|
51
57
|
it 'defaults to 2' do
|
52
58
|
expect(Fleet.open_timeout).to eq 2
|
@@ -59,18 +65,6 @@ describe Fleet do
|
|
59
65
|
end
|
60
66
|
end
|
61
67
|
|
62
|
-
describe '.ssl_options' do
|
63
|
-
it 'defaults to { verify: false }' do
|
64
|
-
expect(Fleet.ssl_options).to eq(verify: false)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe '.proxy' do
|
69
|
-
it 'defaults to nil' do
|
70
|
-
expect(Fleet.proxy).to be_nil
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
68
|
describe '.configure' do
|
75
69
|
it "accepts a block" do
|
76
70
|
expect { Fleet.configure {} }.to_not raise_error
|
metadata
CHANGED
@@ -1,43 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fleet-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CenturyLink
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: excon
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.8.9
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.8.9
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: faraday_middleware
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '='
|
17
|
+
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
19
|
+
version: 0.27.4
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- -
|
24
|
+
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
26
|
+
version: 0.27.4
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,18 +98,15 @@ files:
|
|
112
98
|
- fleet-api.gemspec
|
113
99
|
- lib/fleet.rb
|
114
100
|
- lib/fleet/client.rb
|
115
|
-
- lib/fleet/client/job.rb
|
116
101
|
- lib/fleet/client/machines.rb
|
117
102
|
- lib/fleet/client/state.rb
|
118
103
|
- lib/fleet/client/unit.rb
|
119
104
|
- lib/fleet/configuration.rb
|
120
105
|
- lib/fleet/connection.rb
|
121
106
|
- lib/fleet/error.rb
|
122
|
-
- lib/fleet/middleware/response/raise_error.rb
|
123
107
|
- lib/fleet/request.rb
|
124
108
|
- lib/fleet/service_definition.rb
|
125
109
|
- lib/fleet/version.rb
|
126
|
-
- spec/fleet/client/job_spec.rb
|
127
110
|
- spec/fleet/client/machines_spec.rb
|
128
111
|
- spec/fleet/client/state_spec.rb
|
129
112
|
- spec/fleet/client/unit_spec.rb
|
@@ -131,7 +114,6 @@ files:
|
|
131
114
|
- spec/fleet/configuration_spec.rb
|
132
115
|
- spec/fleet/connection_spec.rb
|
133
116
|
- spec/fleet/error_spec.rb
|
134
|
-
- spec/fleet/middleware/response/raise_error_spec.rb
|
135
117
|
- spec/fleet/request_spec.rb
|
136
118
|
- spec/fleet/service_definition_spec.rb
|
137
119
|
- spec/fleet_spec.rb
|
@@ -161,7 +143,6 @@ signing_key:
|
|
161
143
|
specification_version: 4
|
162
144
|
summary: A simple REST client for the CoreOS Fleet API
|
163
145
|
test_files:
|
164
|
-
- spec/fleet/client/job_spec.rb
|
165
146
|
- spec/fleet/client/machines_spec.rb
|
166
147
|
- spec/fleet/client/state_spec.rb
|
167
148
|
- spec/fleet/client/unit_spec.rb
|
@@ -169,7 +150,6 @@ test_files:
|
|
169
150
|
- spec/fleet/configuration_spec.rb
|
170
151
|
- spec/fleet/connection_spec.rb
|
171
152
|
- spec/fleet/error_spec.rb
|
172
|
-
- spec/fleet/middleware/response/raise_error_spec.rb
|
173
153
|
- spec/fleet/request_spec.rb
|
174
154
|
- spec/fleet/service_definition_spec.rb
|
175
155
|
- spec/fleet_spec.rb
|
data/lib/fleet/client/job.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
module Fleet
|
2
|
-
class Client
|
3
|
-
module Job
|
4
|
-
|
5
|
-
JOB_RESOURCE = 'job'
|
6
|
-
|
7
|
-
def list_jobs
|
8
|
-
opts = { consistent: true, recursive: true, sorted: true }
|
9
|
-
get(job_path, opts)
|
10
|
-
end
|
11
|
-
|
12
|
-
def get_job(service_name)
|
13
|
-
opts = { consistent: true, recursive: true, sorted: false }
|
14
|
-
get(job_path(service_name, :object), opts)
|
15
|
-
end
|
16
|
-
|
17
|
-
def create_job(service_name, job)
|
18
|
-
opts = {
|
19
|
-
querystring: { 'prevExist' => false },
|
20
|
-
body: { value: job.to_json }
|
21
|
-
}
|
22
|
-
put(job_path(service_name, :object), opts)
|
23
|
-
end
|
24
|
-
|
25
|
-
def delete_job(service_name)
|
26
|
-
opts = { dir: false, recursive: true }
|
27
|
-
delete(job_path(service_name), opts)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Valid values for state - :loaded, :launched, :inactive
|
31
|
-
def update_job_target_state(service_name, state)
|
32
|
-
opts = { value: state }
|
33
|
-
put(job_path(service_name, 'target-state'), opts)
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def job_path(*parts)
|
39
|
-
resource_path(JOB_RESOURCE, *parts)
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'json'
|
3
|
-
require 'fleet/error'
|
4
|
-
|
5
|
-
module Fleet::Middleware
|
6
|
-
module Response
|
7
|
-
|
8
|
-
class RaiseError < Faraday::Response::Middleware
|
9
|
-
|
10
|
-
def on_complete(env)
|
11
|
-
status = env[:status].to_i
|
12
|
-
return unless (400..600).include?(status)
|
13
|
-
|
14
|
-
error = parse_error(env[:body])
|
15
|
-
|
16
|
-
# Find the error class that matches the HTTP status code. Default to
|
17
|
-
# Error if no matching class exists.
|
18
|
-
class_name = Fleet::Error::HTTP_CODE_MAP.fetch(status, 'Error')
|
19
|
-
|
20
|
-
fail Fleet.const_get(class_name).new(
|
21
|
-
error['message'],
|
22
|
-
error['errorCode'],
|
23
|
-
error['cause'])
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def parse_error(body)
|
29
|
-
JSON.parse(body)
|
30
|
-
rescue StandardError
|
31
|
-
{ 'message' => body }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
Faraday.register_middleware :response, raise_fleet_error: -> { RaiseError }
|
36
|
-
end
|
37
|
-
end
|