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,42 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://192.168.50.2:4440/api/12/tokens
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-Rundeck-Auth-Token:
|
11
|
+
- cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd
|
12
|
+
Accept:
|
13
|
+
- application/xml
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
Set-Cookie:
|
20
|
+
- JSESSIONID=yibh2tyfyj2g145fkj676ob7x;Path=/
|
21
|
+
Expires:
|
22
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
23
|
+
X-Rundeck-Api-Xml-Response-Wrapper:
|
24
|
+
- 'false'
|
25
|
+
Content-Type:
|
26
|
+
- application/xml;charset=UTF-8
|
27
|
+
X-Rundeck-Api-Version:
|
28
|
+
- '12'
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Server:
|
32
|
+
- Jetty(7.6.0.v20120127)
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: |-
|
36
|
+
<tokens count='2' allusers='true'>
|
37
|
+
<token id='cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd' user='admin' />
|
38
|
+
<token id='uuyuaroo9Cheexe0ao9cohrohjeu8shu' user='user2' />
|
39
|
+
</tokens>
|
40
|
+
http_version:
|
41
|
+
recorded_at: Sun, 23 Nov 2014 15:24:02 GMT
|
42
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,41 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://192.168.50.2:4440/api/12/tokens
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-Rundeck-Auth-Token:
|
11
|
+
- cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd
|
12
|
+
Accept:
|
13
|
+
- application/xml
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
Set-Cookie:
|
20
|
+
- JSESSIONID=yibh2tyfyj2g145fkj676ob7x;Path=/
|
21
|
+
Expires:
|
22
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
23
|
+
X-Rundeck-Api-Xml-Response-Wrapper:
|
24
|
+
- 'false'
|
25
|
+
Content-Type:
|
26
|
+
- application/xml;charset=UTF-8
|
27
|
+
X-Rundeck-Api-Version:
|
28
|
+
- '12'
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Server:
|
32
|
+
- Jetty(7.6.0.v20120127)
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: |-
|
36
|
+
<tokens count='1' allusers='true'>
|
37
|
+
<token id='cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd' user='admin' />
|
38
|
+
</tokens>
|
39
|
+
http_version:
|
40
|
+
recorded_at: Sun, 23 Nov 2014 15:24:02 GMT
|
41
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,41 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://192.168.50.2:4440/api/12/tokens/admin
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-Rundeck-Auth-Token:
|
11
|
+
- cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd
|
12
|
+
Accept:
|
13
|
+
- application/xml
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
Set-Cookie:
|
20
|
+
- JSESSIONID=1hrguobtwmxjgvyr55bwwd495;Path=/
|
21
|
+
Expires:
|
22
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
23
|
+
X-Rundeck-Api-Xml-Response-Wrapper:
|
24
|
+
- 'false'
|
25
|
+
Content-Type:
|
26
|
+
- application/xml;charset=UTF-8
|
27
|
+
X-Rundeck-Api-Version:
|
28
|
+
- '12'
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Server:
|
32
|
+
- Jetty(7.6.0.v20120127)
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: |-
|
36
|
+
<tokens count='1' user='admin'>
|
37
|
+
<token id='cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd' user='admin' />
|
38
|
+
</tokens>
|
39
|
+
http_version:
|
40
|
+
recorded_at: Sun, 23 Nov 2014 15:36:11 GMT
|
41
|
+
recorded_with: VCR 2.9.3
|
@@ -11,22 +11,22 @@ describe Rundeck::Client do
|
|
11
11
|
'-repository ci -release SNAPSHOT -packages app-SNAPSHOT'
|
12
12
|
}
|
13
13
|
}
|
14
|
-
@
|
14
|
+
@job = Rundeck.run_job('2', options)
|
15
15
|
end
|
16
|
-
subject { @
|
16
|
+
subject { @job }
|
17
17
|
|
18
18
|
its(:count) { is_expected.to eq('1') }
|
19
19
|
|
20
20
|
describe '#execution' do
|
21
|
-
subject { @
|
21
|
+
subject { @job.execution }
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
it_behaves_like 'an execution'
|
24
|
+
|
25
|
+
describe '#job' do
|
26
|
+
subject { @job.execution.job }
|
27
|
+
|
28
|
+
it_behaves_like 'a job with a project attribute'
|
29
|
+
end
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'expects a post to have been made' do
|
@@ -72,13 +72,13 @@ describe Rundeck::Client do
|
|
72
72
|
context '#first' do
|
73
73
|
subject { @job_executions.execution[0] }
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
75
|
+
it_behaves_like 'a past execution'
|
76
|
+
|
77
|
+
describe '#job' do
|
78
|
+
subject { @job_executions.execution[0].job }
|
79
|
+
|
80
|
+
it_behaves_like 'a job with a project attribute'
|
81
|
+
end
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
@@ -101,9 +101,12 @@ describe Rundeck::Client do
|
|
101
101
|
subject { @running_jobs.execution }
|
102
102
|
|
103
103
|
it { is_expected.to be_an Array }
|
104
|
-
|
105
|
-
|
106
|
-
|
104
|
+
|
105
|
+
context 'the first execution' do
|
106
|
+
subject { @running_jobs.execution[0] }
|
107
|
+
|
108
|
+
it_behaves_like 'an execution'
|
109
|
+
end
|
107
110
|
end
|
108
111
|
|
109
112
|
it 'expects a get to have been made' do
|
@@ -118,10 +121,7 @@ describe Rundeck::Client do
|
|
118
121
|
describe '#execution' do
|
119
122
|
subject { @running_jobs.execution }
|
120
123
|
|
121
|
-
|
122
|
-
it { is_expected.to respond_to(:user) }
|
123
|
-
it { is_expected.to respond_to(:date_started) }
|
124
|
-
it { is_expected.to respond_to(:job) }
|
124
|
+
it_behaves_like 'an execution'
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'expects a get to have been made' do
|
@@ -150,6 +150,7 @@ describe Rundeck::Client do
|
|
150
150
|
vcr: { cassette_name: 'delete_job_executions' } do
|
151
151
|
|
152
152
|
it { is_expected.to respond_to(:successful) }
|
153
|
+
it { is_expected.to respond_to(:allsuccessful) }
|
153
154
|
it { is_expected.to respond_to(:requestcount) }
|
154
155
|
|
155
156
|
it 'expects a delete to have been made' do
|
@@ -159,9 +160,14 @@ describe Rundeck::Client do
|
|
159
160
|
|
160
161
|
context 'when a job does not have executions',
|
161
162
|
vcr: { cassette_name: 'delete_job_executions_invalid' } do
|
162
|
-
it { is_expected.to respond_to(:successful) }
|
163
|
-
its('successful.count') { is_expected.to eq('0') }
|
164
163
|
its(:allsuccessful) { is_expected.to eq('true') }
|
164
|
+
its(:requestcount) { is_expected.to eq('0') }
|
165
|
+
|
166
|
+
describe '#successful' do
|
167
|
+
subject { @job_executions.successful }
|
168
|
+
|
169
|
+
its(:count) { is_expected.to eq('0') }
|
170
|
+
end
|
165
171
|
end
|
166
172
|
end
|
167
173
|
|
@@ -202,9 +208,14 @@ describe Rundeck::Client do
|
|
202
208
|
let(:id) { '5' }
|
203
209
|
|
204
210
|
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
205
|
-
its('execution.id') { is_expected.to eq('5') }
|
206
211
|
its(:status) { is_expected.to eq('aborted') }
|
207
212
|
|
213
|
+
describe '#execution' do
|
214
|
+
subject { @execution.execution }
|
215
|
+
|
216
|
+
it { is_expected.to respond_to(:id) }
|
217
|
+
end
|
218
|
+
|
208
219
|
it 'expects a post to have been made' do
|
209
220
|
expect(a_post('/execution/5/abort')).to have_been_made
|
210
221
|
end
|
@@ -215,9 +226,14 @@ describe Rundeck::Client do
|
|
215
226
|
let(:id) { '4' }
|
216
227
|
|
217
228
|
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
218
|
-
its('execution.id') { is_expected.to eq('4') }
|
219
229
|
its(:status) { is_expected.to eq('failed') }
|
220
230
|
its(:reason) { is_expected.to eq('Job is not running') }
|
231
|
+
|
232
|
+
describe '#execution' do
|
233
|
+
subject { @execution.execution }
|
234
|
+
|
235
|
+
it { is_expected.to respond_to(:id) }
|
236
|
+
end
|
221
237
|
end
|
222
238
|
end
|
223
239
|
|
@@ -240,10 +256,13 @@ describe Rundeck::Client do
|
|
240
256
|
end
|
241
257
|
subject { @execution }
|
242
258
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
259
|
+
it_behaves_like 'a past execution'
|
260
|
+
|
261
|
+
describe '#job' do
|
262
|
+
subject { @execution.job }
|
263
|
+
|
264
|
+
it_behaves_like 'a job with a project attribute'
|
265
|
+
end
|
247
266
|
|
248
267
|
it 'expects a get to have been made' do
|
249
268
|
expect(a_get('/execution/15')).to have_been_made
|
@@ -274,7 +293,12 @@ describe Rundeck::Client do
|
|
274
293
|
|
275
294
|
its(:requestcount) { is_expected.to eq('3') }
|
276
295
|
its(:allsuccessful) { is_expected.to eq('true') }
|
277
|
-
|
296
|
+
|
297
|
+
describe '#successful' do
|
298
|
+
subject { @executions.successful }
|
299
|
+
|
300
|
+
it { is_expected.to respond_to(:count) }
|
301
|
+
end
|
278
302
|
|
279
303
|
it 'expects a post to have been made' do
|
280
304
|
expect(a_post('/executions/delete?ids=3,4,5')).to have_been_made
|
@@ -343,9 +367,31 @@ describe Rundeck::Client do
|
|
343
367
|
vcr: { cassette_name: 'execution_query_no_params_valid' } do
|
344
368
|
let(:query) { {} }
|
345
369
|
|
346
|
-
its('count.to_i') { is_expected.to be > 0 }
|
347
370
|
it { is_expected.to respond_to(:execution) }
|
348
|
-
|
371
|
+
|
372
|
+
describe '#count' do
|
373
|
+
subject { @executions.count.to_i }
|
374
|
+
|
375
|
+
it { is_expected.to be > 0 }
|
376
|
+
end
|
377
|
+
|
378
|
+
describe '#execution' do
|
379
|
+
subject { @executions.execution }
|
380
|
+
|
381
|
+
it { is_expected.to be_an Array }
|
382
|
+
|
383
|
+
context 'the first execution' do
|
384
|
+
subject { @executions.execution[0] }
|
385
|
+
|
386
|
+
it_behaves_like 'an execution'
|
387
|
+
|
388
|
+
describe '#job' do
|
389
|
+
subject { @executions.execution[0].job }
|
390
|
+
|
391
|
+
it_behaves_like 'a job with a project attribute'
|
392
|
+
end
|
393
|
+
end
|
394
|
+
end
|
349
395
|
|
350
396
|
it 'expects a get to have been made' do
|
351
397
|
expect(a_get('/executions?project=anvils')).to have_been_made
|
@@ -15,11 +15,12 @@ describe Rundeck::Client do
|
|
15
15
|
it { is_expected.to be_an Array }
|
16
16
|
its(:length) { is_expected.to eq(6) }
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
context 'the first job' do
|
19
|
+
subject { @jobs.job[0] }
|
20
|
+
|
21
|
+
it_behaves_like 'a job'
|
22
|
+
its(:project) { is_expected.to eq('anvils') }
|
23
|
+
end
|
23
24
|
end
|
24
25
|
|
25
26
|
it 'expects a get to have been made' do
|
@@ -33,13 +34,28 @@ describe Rundeck::Client do
|
|
33
34
|
end
|
34
35
|
subject { @job }
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
it_behaves_like 'a job'
|
38
|
+
its(:loglevel) { is_expected.to eq('INFO') }
|
39
|
+
|
40
|
+
describe '#context' do
|
41
|
+
subject { @job.context }
|
42
|
+
|
43
|
+
its(:project) { is_expected.to eq('anvils') }
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#sequence' do
|
47
|
+
subject { @job.sequence }
|
48
|
+
|
49
|
+
it { is_expected.to respond_to(:keepgoing) }
|
50
|
+
it { is_expected.to respond_to(:strategy) }
|
51
|
+
|
52
|
+
describe '#command' do
|
53
|
+
subject { @job.sequence.command }
|
54
|
+
|
55
|
+
it { is_expected.to respond_to(:scriptargs) }
|
56
|
+
it { is_expected.to respond_to(:script) }
|
57
|
+
end
|
58
|
+
end
|
43
59
|
|
44
60
|
it 'expects a get to have been made' do
|
45
61
|
expect(a_get('/job/2')).to have_been_made
|
@@ -76,24 +92,28 @@ describe Rundeck::Client do
|
|
76
92
|
describe '.import_job' do
|
77
93
|
context 'with valid format' do
|
78
94
|
before do
|
79
|
-
@
|
95
|
+
@job_import = Rundeck.import_jobs(content, format)
|
80
96
|
end
|
81
|
-
subject { @
|
97
|
+
subject { @job_import }
|
82
98
|
|
83
99
|
context 'yaml', vcr: { cassette_name: 'import_job_yaml' } do
|
84
100
|
let(:format) { 'yaml' }
|
85
101
|
let(:content) { job_yaml }
|
86
102
|
|
87
103
|
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
88
|
-
its('succeeded.count') { is_expected.to eq('1') }
|
89
104
|
its('failed.count') { is_expected.to eq('0') }
|
90
105
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
106
|
+
describe '#succeeded' do
|
107
|
+
subject { @job_import.succeeded }
|
108
|
+
|
109
|
+
its(:count) { is_expected.to eq('1') }
|
110
|
+
|
111
|
+
describe '#job' do
|
112
|
+
subject { @job_import.succeeded.job }
|
113
|
+
|
114
|
+
it_behaves_like 'a job import'
|
115
|
+
end
|
116
|
+
end
|
97
117
|
|
98
118
|
it 'expects a post to have been made' do
|
99
119
|
expect(a_post('/jobs/import?format=yaml')).to have_been_made
|
@@ -105,15 +125,18 @@ describe Rundeck::Client do
|
|
105
125
|
let(:content) { job_xml }
|
106
126
|
|
107
127
|
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
108
|
-
its('succeeded.count') { is_expected.to eq('1') }
|
109
128
|
its('failed.count') { is_expected.to eq('0') }
|
110
129
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
130
|
+
describe '#succeeded' do
|
131
|
+
subject { @job_import.succeeded }
|
132
|
+
its(:count) { is_expected.to eq('1') }
|
133
|
+
|
134
|
+
describe '#job' do
|
135
|
+
subject { @job_import.succeeded.job }
|
136
|
+
|
137
|
+
it_behaves_like 'a job import'
|
138
|
+
end
|
139
|
+
end
|
117
140
|
|
118
141
|
it 'expects a post to have been made' do
|
119
142
|
expect(a_post('/jobs/import?format=xml')).to have_been_made
|
@@ -14,8 +14,21 @@ describe Rundeck::Client do
|
|
14
14
|
subject { @keys }
|
15
15
|
|
16
16
|
it { is_expected.to be_an Array }
|
17
|
-
|
18
|
-
|
17
|
+
|
18
|
+
context 'the first key' do
|
19
|
+
subject { @keys.first }
|
20
|
+
|
21
|
+
its(:name) { is_expected.to eq('key') }
|
22
|
+
its(:type) { is_expected.to eq('file') }
|
23
|
+
it { is_expected.to respond_to(:url) }
|
24
|
+
it { is_expected.to respond_to(:path) }
|
25
|
+
|
26
|
+
describe '#resource_meta' do
|
27
|
+
subject { @keys.first.resource_meta }
|
28
|
+
|
29
|
+
its(:rundeck_content_type) { is_expected.to eq('application/pgp-key') }
|
30
|
+
end
|
31
|
+
end
|
19
32
|
|
20
33
|
it 'expects a get to have been made' do
|
21
34
|
expect(a_get('/storage/keys/path/to')).to have_been_made
|