rundeck 0.0.4 → 1.0.1
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/CHANGELOG.md +11 -2
- data/README.md +12 -8
- data/lib/rundeck/client.rb +1 -0
- data/lib/rundeck/client/execution.rb +7 -13
- data/lib/rundeck/client/job.rb +1 -2
- data/lib/rundeck/client/project.rb +4 -1
- data/lib/rundeck/client/token.rb +63 -0
- data/lib/rundeck/configuration.rb +0 -4
- data/lib/rundeck/request.rb +8 -2
- data/lib/rundeck/version.rb +1 -1
- data/spec/cassettes/12/create_token.yml +38 -0
- data/spec/cassettes/12/delete_token.yml +32 -0
- data/spec/cassettes/12/delete_token_invalid.yml +41 -0
- data/spec/cassettes/12/token.yml +38 -0
- data/spec/cassettes/12/token_invalid.yml +41 -0
- data/spec/cassettes/12/tokens_multiple.yml +42 -0
- data/spec/cassettes/12/tokens_single.yml +41 -0
- data/spec/cassettes/12/tokens_user.yml +41 -0
- data/spec/rundeck/client/execution_spec.rb +81 -35
- data/spec/rundeck/client/job_spec.rb +51 -28
- data/spec/rundeck/client/key_spec.rb +15 -2
- data/spec/rundeck/client/token_spec.rb +113 -0
- data/spec/rundeck/request_spec.rb +4 -1
- data/spec/rundeck_spec.rb +1 -2
- data/spec/spec_helper.rb +2 -1
- data/spec/support/helpers.rb +10 -30
- data/spec/support/shared_examples.rb +40 -0
- metadata +23 -2
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rundeck::Client do
|
4
|
+
describe '.tokens' do
|
5
|
+
before do
|
6
|
+
@tokens = Rundeck.tokens(user)
|
7
|
+
end
|
8
|
+
subject { @tokens }
|
9
|
+
|
10
|
+
context 'when user is nil' do
|
11
|
+
let(:user) { nil }
|
12
|
+
|
13
|
+
context 'when a single token is returned',
|
14
|
+
vcr: { cassette_name: 'tokens_single' } do
|
15
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
16
|
+
its(:token) { is_expected.to be_a Rundeck::ObjectifiedHash }
|
17
|
+
its(:allusers) { is_expected.to eq('true') }
|
18
|
+
|
19
|
+
it 'expects a get to have been made' do
|
20
|
+
expect(a_get('/tokens')).to have_been_made
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when multiple tokens are returned',
|
25
|
+
vcr: { cassette_name: 'tokens_multiple' } do
|
26
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
27
|
+
its(:token) { is_expected.to be_an Array }
|
28
|
+
its(:allusers) { is_expected.to eq('true') }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when user is specified', vcr: { cassette_name: 'tokens_user' } do
|
33
|
+
let(:user) { 'admin' }
|
34
|
+
|
35
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
36
|
+
its(:user) { is_expected.to eq('admin') }
|
37
|
+
|
38
|
+
describe '#token' do
|
39
|
+
subject { @tokens.token }
|
40
|
+
|
41
|
+
it_behaves_like 'a token'
|
42
|
+
its(:user) { is_expected.to eq('admin') }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '.token' do
|
48
|
+
context 'when a token exists', vcr: { cassette_name: 'token' } do
|
49
|
+
before do
|
50
|
+
@token = Rundeck.token('cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')
|
51
|
+
end
|
52
|
+
subject { @token }
|
53
|
+
|
54
|
+
it_behaves_like 'a token'
|
55
|
+
|
56
|
+
it 'expects a get to have been made' do
|
57
|
+
expect(a_get('/token/cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')).to have_been_made
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'when a token does not exist',
|
62
|
+
vcr: { cassette_name: 'token_invalid' } do
|
63
|
+
specify do
|
64
|
+
expect do
|
65
|
+
Rundeck.token('123456')
|
66
|
+
end.to raise_error(Rundeck::Error::NotFound,
|
67
|
+
/Token does not exist: 123456/)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '.create_token' do
|
73
|
+
context 'when the user exists', vcr: { cassette_name: 'create_token' } do
|
74
|
+
before do
|
75
|
+
@token = Rundeck.create_token('admin')
|
76
|
+
end
|
77
|
+
subject { @token }
|
78
|
+
|
79
|
+
it_behaves_like 'a token'
|
80
|
+
|
81
|
+
it 'expects a post to have been made' do
|
82
|
+
expect(a_post('/tokens/admin')).to have_been_made
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '.delete_token' do
|
88
|
+
context 'when a token exists', vcr: { cassette_name: 'delete_token' } do
|
89
|
+
before do
|
90
|
+
@token = Rundeck.delete_token('cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')
|
91
|
+
end
|
92
|
+
subject { @token }
|
93
|
+
|
94
|
+
it { is_expected.to be_nil }
|
95
|
+
|
96
|
+
it 'expects a delete to have been made' do
|
97
|
+
expect(
|
98
|
+
a_delete('/token/cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')
|
99
|
+
).to have_been_made
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'when a token does not exist',
|
104
|
+
vcr: { cassette_name: 'delete_token_invalid' } do
|
105
|
+
specify do
|
106
|
+
expect do
|
107
|
+
Rundeck.delete_token('123456')
|
108
|
+
end.to raise_error(Rundeck::Error::NotFound,
|
109
|
+
/Token does not exist: 123456/)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -32,7 +32,10 @@ describe Rundeck::Request do
|
|
32
32
|
end
|
33
33
|
subject { @rundeck_request }
|
34
34
|
|
35
|
-
it
|
35
|
+
it do
|
36
|
+
expect(Rundeck::Request.base_uri)
|
37
|
+
.to eq("http://api.example.org/api/#{Rundeck.api_version}")
|
38
|
+
end
|
36
39
|
its(:api_token) { is_expected.to eq('secret') }
|
37
40
|
end
|
38
41
|
end
|
data/spec/rundeck_spec.rb
CHANGED
@@ -45,10 +45,9 @@ describe Rundeck do
|
|
45
45
|
Rundeck.configure do |config|
|
46
46
|
config.send("#{key}=", key)
|
47
47
|
end
|
48
|
-
@key = key == :endpoint ? "#{key}/api/#{Rundeck.api_version}" : key
|
49
48
|
end
|
50
49
|
|
51
|
-
it { is_expected.to eq(
|
50
|
+
it { is_expected.to eq(key) }
|
52
51
|
end
|
53
52
|
end
|
54
53
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,7 @@ require 'codeclimate-test-reporter'
|
|
8
8
|
CodeClimate::TestReporter.start
|
9
9
|
|
10
10
|
require 'support/helpers'
|
11
|
+
require 'support/shared_examples'
|
11
12
|
|
12
13
|
require File.expand_path('../../lib/rundeck', __FILE__)
|
13
14
|
|
@@ -19,7 +20,7 @@ RSpec.configure do |config|
|
|
19
20
|
config.before(:each) do
|
20
21
|
# Configuration for Anvils Demo Vagrant Box. API token might change.
|
21
22
|
Rundeck.endpoint = 'http://192.168.50.2:4440'
|
22
|
-
Rundeck.api_token = '
|
23
|
+
Rundeck.api_token = 'cbsQgUIZBOyCgoipJAwKd1YgfcwPJ0FY'
|
23
24
|
WebMock.reset!
|
24
25
|
end
|
25
26
|
end
|
data/spec/support/helpers.rb
CHANGED
@@ -4,58 +4,38 @@ module Helpers
|
|
4
4
|
File.new(File.dirname(__FILE__) + "/../fixtures/#{name}.xml")
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
stub_request(:get, "#{Rundeck.endpoint}#{path}")
|
10
|
-
.with(headers: { 'Accept' => "application/#{accept}",
|
11
|
-
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
12
|
-
.to_return(body: load_fixture(fixture))
|
7
|
+
def endpoint
|
8
|
+
"#{Rundeck.endpoint}/api/#{Rundeck.api_version}"
|
13
9
|
end
|
14
10
|
|
11
|
+
# GET
|
15
12
|
def a_get(path, accept = 'xml')
|
16
|
-
a_request(:get, "#{
|
13
|
+
a_request(:get, "#{endpoint}#{path}")
|
17
14
|
.with(headers: { 'Accept' => "application/#{accept}",
|
18
15
|
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
19
16
|
end
|
20
17
|
|
21
18
|
# POST
|
22
|
-
def stub_post(path, fixture, status_code = 200, accept = 'xml')
|
23
|
-
stub_request(:post, "#{Rundeck.endpoint}#{path}")
|
24
|
-
.with(headers: { 'Accept' => "application/#{accept}",
|
25
|
-
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
26
|
-
.to_return(body: load_fixture(fixture), status: status_code)
|
27
|
-
end
|
28
|
-
|
29
19
|
def a_post(path, accept = 'xml')
|
30
|
-
a_request(:post, "#{
|
20
|
+
a_request(:post, "#{endpoint}#{path}")
|
31
21
|
.with(headers: { 'Accept' => "application/#{accept}",
|
32
22
|
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
33
23
|
end
|
34
24
|
|
35
|
-
|
36
|
-
|
37
|
-
stub_request(:put, "#{Rundeck.endpoint}#{path}")
|
38
|
-
.with(headers: { 'Accept' => "application/#{accept}",
|
39
|
-
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
40
|
-
.to_return(body: load_fixture(fixture))
|
25
|
+
def a_simple_post(path)
|
26
|
+
a_request(:post, "#{endpoint}#{path}")
|
41
27
|
end
|
42
28
|
|
29
|
+
# PUT
|
43
30
|
def a_put(path, accept = 'xml')
|
44
|
-
a_request(:put, "#{
|
31
|
+
a_request(:put, "#{endpoint}#{path}")
|
45
32
|
.with(headers: { 'Accept' => "application/#{accept}",
|
46
33
|
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
47
34
|
end
|
48
35
|
|
49
36
|
# DELETE
|
50
|
-
def stub_delete(path, fixture, accept = 'xml')
|
51
|
-
stub_request(:delete, "#{Rundeck.endpoint}#{path}")
|
52
|
-
.with(headers: { 'Accept' => "application/#{accept}",
|
53
|
-
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
54
|
-
.to_return(body: load_fixture(fixture))
|
55
|
-
end
|
56
|
-
|
57
37
|
def a_delete(path, accept = 'xml')
|
58
|
-
a_request(:delete, "#{
|
38
|
+
a_request(:delete, "#{endpoint}#{path}")
|
59
39
|
.with(headers: { 'Accept' => "application/#{accept}",
|
60
40
|
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
61
41
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
shared_examples 'a job' do
|
2
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
3
|
+
it { is_expected.to respond_to(:id) }
|
4
|
+
it { is_expected.to respond_to(:name) }
|
5
|
+
it { is_expected.to respond_to(:group) }
|
6
|
+
it { is_expected.to respond_to(:description) }
|
7
|
+
end
|
8
|
+
|
9
|
+
shared_examples 'a job with a project attribute' do
|
10
|
+
it_behaves_like 'a job'
|
11
|
+
it { is_expected.to respond_to(:project) }
|
12
|
+
end
|
13
|
+
|
14
|
+
shared_examples 'a job import' do
|
15
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
16
|
+
it { is_expected.to respond_to(:id) }
|
17
|
+
it { is_expected.to respond_to(:name) }
|
18
|
+
it { is_expected.to respond_to(:group) }
|
19
|
+
it { is_expected.to respond_to(:project) }
|
20
|
+
it { is_expected.to respond_to(:url) }
|
21
|
+
end
|
22
|
+
|
23
|
+
shared_examples 'an execution' do
|
24
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
25
|
+
it { is_expected.to respond_to(:user) }
|
26
|
+
it { is_expected.to respond_to(:date_started) }
|
27
|
+
it { is_expected.to respond_to(:description) }
|
28
|
+
it { is_expected.to respond_to(:argstring) }
|
29
|
+
end
|
30
|
+
|
31
|
+
shared_examples 'a past execution' do
|
32
|
+
it_behaves_like 'an execution'
|
33
|
+
it { is_expected.to respond_to(:date_ended) }
|
34
|
+
end
|
35
|
+
|
36
|
+
shared_examples 'a token' do
|
37
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
38
|
+
it { is_expected.to respond_to(:id) }
|
39
|
+
it { is_expected.to respond_to(:user) }
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rundeck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Drew A. Blessing
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -217,6 +217,7 @@ files:
|
|
217
217
|
- lib/rundeck/client/job.rb
|
218
218
|
- lib/rundeck/client/key.rb
|
219
219
|
- lib/rundeck/client/project.rb
|
220
|
+
- lib/rundeck/client/token.rb
|
220
221
|
- lib/rundeck/configuration.rb
|
221
222
|
- lib/rundeck/error.rb
|
222
223
|
- lib/rundeck/objectified_hash.rb
|
@@ -233,6 +234,7 @@ files:
|
|
233
234
|
- spec/cassettes/12/create_project_json.yml
|
234
235
|
- spec/cassettes/12/create_project_xml.yml
|
235
236
|
- spec/cassettes/12/create_public_key.yml
|
237
|
+
- spec/cassettes/12/create_token.yml
|
236
238
|
- spec/cassettes/12/delete_execution_invalid.yml
|
237
239
|
- spec/cassettes/12/delete_execution_valid.yml
|
238
240
|
- spec/cassettes/12/delete_job_executions.yml
|
@@ -244,6 +246,8 @@ files:
|
|
244
246
|
- spec/cassettes/12/delete_key_public.yml
|
245
247
|
- spec/cassettes/12/delete_project_invalid.yml
|
246
248
|
- spec/cassettes/12/delete_project_valid.yml
|
249
|
+
- spec/cassettes/12/delete_token.yml
|
250
|
+
- spec/cassettes/12/delete_token_invalid.yml
|
247
251
|
- spec/cassettes/12/execution_invalid.yml
|
248
252
|
- spec/cassettes/12/execution_query_invalid.yml
|
249
253
|
- spec/cassettes/12/execution_query_no_params_valid.yml
|
@@ -273,18 +277,25 @@ files:
|
|
273
277
|
- spec/cassettes/12/running_jobs_multiple.yml
|
274
278
|
- spec/cassettes/12/running_jobs_none.yml
|
275
279
|
- spec/cassettes/12/running_jobs_single.yml
|
280
|
+
- spec/cassettes/12/token.yml
|
281
|
+
- spec/cassettes/12/token_invalid.yml
|
282
|
+
- spec/cassettes/12/tokens_multiple.yml
|
283
|
+
- spec/cassettes/12/tokens_single.yml
|
284
|
+
- spec/cassettes/12/tokens_user.yml
|
276
285
|
- spec/cassettes/12/update_private_key.yml
|
277
286
|
- spec/cassettes/12/update_public_key.yml
|
278
287
|
- spec/rundeck/client/execution_spec.rb
|
279
288
|
- spec/rundeck/client/job_spec.rb
|
280
289
|
- spec/rundeck/client/key_spec.rb
|
281
290
|
- spec/rundeck/client/project_spec.rb
|
291
|
+
- spec/rundeck/client/token_spec.rb
|
282
292
|
- spec/rundeck/client_spec.rb
|
283
293
|
- spec/rundeck/objectified_hash_spec.rb
|
284
294
|
- spec/rundeck/request_spec.rb
|
285
295
|
- spec/rundeck_spec.rb
|
286
296
|
- spec/spec_helper.rb
|
287
297
|
- spec/support/helpers.rb
|
298
|
+
- spec/support/shared_examples.rb
|
288
299
|
homepage: http://dblessing.github.io/rundeck-ruby
|
289
300
|
licenses:
|
290
301
|
- BSD-2-Clause
|
@@ -320,6 +331,7 @@ test_files:
|
|
320
331
|
- spec/cassettes/12/create_project_json.yml
|
321
332
|
- spec/cassettes/12/create_project_xml.yml
|
322
333
|
- spec/cassettes/12/create_public_key.yml
|
334
|
+
- spec/cassettes/12/create_token.yml
|
323
335
|
- spec/cassettes/12/delete_execution_invalid.yml
|
324
336
|
- spec/cassettes/12/delete_execution_valid.yml
|
325
337
|
- spec/cassettes/12/delete_job_executions.yml
|
@@ -331,6 +343,8 @@ test_files:
|
|
331
343
|
- spec/cassettes/12/delete_key_public.yml
|
332
344
|
- spec/cassettes/12/delete_project_invalid.yml
|
333
345
|
- spec/cassettes/12/delete_project_valid.yml
|
346
|
+
- spec/cassettes/12/delete_token.yml
|
347
|
+
- spec/cassettes/12/delete_token_invalid.yml
|
334
348
|
- spec/cassettes/12/execution_invalid.yml
|
335
349
|
- spec/cassettes/12/execution_query_invalid.yml
|
336
350
|
- spec/cassettes/12/execution_query_no_params_valid.yml
|
@@ -360,16 +374,23 @@ test_files:
|
|
360
374
|
- spec/cassettes/12/running_jobs_multiple.yml
|
361
375
|
- spec/cassettes/12/running_jobs_none.yml
|
362
376
|
- spec/cassettes/12/running_jobs_single.yml
|
377
|
+
- spec/cassettes/12/token.yml
|
378
|
+
- spec/cassettes/12/token_invalid.yml
|
379
|
+
- spec/cassettes/12/tokens_multiple.yml
|
380
|
+
- spec/cassettes/12/tokens_single.yml
|
381
|
+
- spec/cassettes/12/tokens_user.yml
|
363
382
|
- spec/cassettes/12/update_private_key.yml
|
364
383
|
- spec/cassettes/12/update_public_key.yml
|
365
384
|
- spec/rundeck/client/execution_spec.rb
|
366
385
|
- spec/rundeck/client/job_spec.rb
|
367
386
|
- spec/rundeck/client/key_spec.rb
|
368
387
|
- spec/rundeck/client/project_spec.rb
|
388
|
+
- spec/rundeck/client/token_spec.rb
|
369
389
|
- spec/rundeck/client_spec.rb
|
370
390
|
- spec/rundeck/objectified_hash_spec.rb
|
371
391
|
- spec/rundeck/request_spec.rb
|
372
392
|
- spec/rundeck_spec.rb
|
373
393
|
- spec/spec_helper.rb
|
374
394
|
- spec/support/helpers.rb
|
395
|
+
- spec/support/shared_examples.rb
|
375
396
|
has_rdoc:
|