vmfloaty 0.9.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +83 -47
- data/lib/vmfloaty.rb +64 -35
- data/lib/vmfloaty/abs.rb +56 -13
- data/lib/vmfloaty/conf.rb +1 -1
- data/lib/vmfloaty/logger.rb +27 -0
- data/lib/vmfloaty/nonstandard_pooler.rb +2 -2
- data/lib/vmfloaty/pooler.rb +34 -4
- data/lib/vmfloaty/service.rb +12 -17
- data/lib/vmfloaty/ssh.rb +11 -5
- data/lib/vmfloaty/utils.rb +54 -28
- data/lib/vmfloaty/version.rb +1 -1
- data/spec/spec_helper.rb +11 -0
- data/spec/vmfloaty/abs_spec.rb +32 -2
- data/spec/vmfloaty/nonstandard_pooler_spec.rb +2 -2
- data/spec/vmfloaty/pooler_spec.rb +22 -2
- data/spec/vmfloaty/ssh_spec.rb +49 -0
- data/spec/vmfloaty/utils_spec.rb +4 -4
- data/spec/vmfloaty/vmfloaty_services_spec.rb +39 -0
- metadata +27 -15
data/lib/vmfloaty/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'simplecov'
|
4
|
+
require 'coveralls'
|
5
|
+
|
6
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
|
7
|
+
SimpleCov::Formatter::HTMLFormatter,
|
8
|
+
Coveralls::SimpleCov::Formatter
|
9
|
+
])
|
10
|
+
SimpleCov.start do
|
11
|
+
add_filter %r{^/spec/}
|
12
|
+
end
|
13
|
+
|
3
14
|
require 'vmfloaty'
|
4
15
|
require 'webmock/rspec'
|
5
16
|
|
data/spec/vmfloaty/abs_spec.rb
CHANGED
@@ -65,14 +65,14 @@ describe ABS do
|
|
65
65
|
|
66
66
|
describe '#test_abs_status_queue_endpoint' do
|
67
67
|
before :each do
|
68
|
-
# rubocop:disable
|
68
|
+
# rubocop:disable Layout/LineLength
|
69
69
|
@active_requests_response = '
|
70
70
|
[
|
71
71
|
"{ \"state\":\"allocated\",\"last_processed\":\"2019-12-16 23:00:34 +0000\",\"allocated_resources\":[{\"hostname\":\"take-this.delivery.puppetlabs.net\",\"type\":\"win-2012r2-x86_64\",\"engine\":\"vmpooler\"}],\"audit_log\":{\"2019-12-13 16:45:29 +0000\":\"Allocated take-this.delivery.puppetlabs.net for job 1576255517241\"},\"request\":{\"resources\":{\"win-2012r2-x86_64\":1},\"job\":{\"id\":\"1576255517241\",\"tags\":{\"user\":\"test-user\"},\"user\":\"test-user\",\"time-received\":1576255519},\"priority\":1}}",
|
72
72
|
"null",
|
73
73
|
"{\"state\":\"allocated\",\"last_processed\":\"2019-12-16 23:00:34 +0000\",\"allocated_resources\":[{\"hostname\":\"not-this.delivery.puppetlabs.net\",\"type\":\"win-2012r2-x86_64\",\"engine\":\"vmpooler\"}],\"audit_log\":{\"2019-12-13 16:46:14 +0000\":\"Allocated not-this.delivery.puppetlabs.net for job 1576255565159\"},\"request\":{\"resources\":{\"win-2012r2-x86_64\":1},\"job\":{\"id\":\"1576255565159\",\"tags\":{\"user\":\"not-test-user\"},\"user\":\"not-test-user\",\"time-received\":1576255566},\"priority\":1}}"
|
74
74
|
]'
|
75
|
-
# rubocop:enable
|
75
|
+
# rubocop:enable Layout/LineLength
|
76
76
|
@token = 'utpg2i2xswor6h8ttjhu3d47z53yy47y'
|
77
77
|
@test_user = 'test-user'
|
78
78
|
end
|
@@ -92,5 +92,35 @@ describe ABS do
|
|
92
92
|
)
|
93
93
|
end
|
94
94
|
end
|
95
|
+
|
96
|
+
describe '#test_abs_delete_jobid' do
|
97
|
+
before :each do
|
98
|
+
# rubocop:disable Layout/LineLength
|
99
|
+
@active_requests_response = '
|
100
|
+
[
|
101
|
+
"{ \"state\":\"allocated\", \"last_processed\":\"2020-01-17 22:29:13 +0000\", \"allocated_resources\":[{\"hostname\":\"craggy-chord.delivery.puppetlabs.net\", \"type\":\"centos-7-x86_64\", \"engine\":\"vmpooler\"}, {\"hostname\":\"visible-revival.delivery.puppetlabs.net\", \"type\":\"centos-7-x86_64\", \"engine\":\"vmpooler\"}], \"audit_log\":{\"2020-01-17 22:28:45 +0000\":\"Allocated craggy-chord.delivery.puppetlabs.net, visible-revival.delivery.puppetlabs.net for job 1579300120799\"}, \"request\":{\"resources\":{\"centos-7-x86_64\":2}, \"job\":{\"id\":\"1579300120799\", \"tags\":{\"user\":\"test-user\"}, \"user\":\"test-user\", \"time-received\":1579300120}, \"priority\":3}}"
|
102
|
+
]'
|
103
|
+
@return_request = { '{"job_id":"1579300120799","hosts":{"hostname":"craggy-chord.delivery.puppetlabs.net","type":"centos-7-x86_64","engine":"vmpooler"},{"hostname":"visible-revival.delivery.puppetlabs.net","type":"centos-7-x86_64","engine":"vmpooler"}}'=>true }
|
104
|
+
# rubocop:enable Layout/LineLength
|
105
|
+
@token = 'utpg2i2xswor6h8ttjhu3d47z53yy47y'
|
106
|
+
@test_user = 'test-user'
|
107
|
+
# Job ID
|
108
|
+
@hosts = ['1579300120799']
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'will delete the whole job' do
|
112
|
+
stub_request(:get, 'https://abs.example.com/status/queue')
|
113
|
+
.to_return(:status => 200, :body => @active_requests_response, :headers => {})
|
114
|
+
stub_request(:post, 'https://abs.example.com/return')
|
115
|
+
.with(:body => @return_request)
|
116
|
+
.to_return(:status => 200, :body => 'OK', :headers => {})
|
117
|
+
|
118
|
+
ret = ABS.delete(false, @abs_url, @hosts, @token, @test_user)
|
119
|
+
|
120
|
+
expect(ret).to include(
|
121
|
+
'craggy-chord.delivery.puppetlabs.net' => { 'ok'=>true }, 'visible-revival.delivery.puppetlabs.net' => { 'ok'=>true },
|
122
|
+
)
|
123
|
+
end
|
124
|
+
end
|
95
125
|
end
|
96
126
|
end
|
@@ -274,7 +274,7 @@ describe NonstandardPooler do
|
|
274
274
|
.with(:headers => @auth_token_headers)
|
275
275
|
.to_return(:status => 200, :body => @delete_response_success, :headers => {})
|
276
276
|
|
277
|
-
request = NonstandardPooler.delete(false, @nspooler_url, 'sol11-7', 'token-value')
|
277
|
+
request = NonstandardPooler.delete(false, @nspooler_url, 'sol11-7', 'token-value', nil)
|
278
278
|
expect(request['sol11-7']['ok']).to be true
|
279
279
|
end
|
280
280
|
|
@@ -283,7 +283,7 @@ describe NonstandardPooler do
|
|
283
283
|
.with(:headers => @auth_token_headers)
|
284
284
|
.to_return(:status => 401, :body => @delete_response_failure, :headers => {})
|
285
285
|
|
286
|
-
request = NonstandardPooler.delete(false, @nspooler_url, 'fakehost', 'token-value')
|
286
|
+
request = NonstandardPooler.delete(false, @nspooler_url, 'fakehost', 'token-value', nil)
|
287
287
|
expect(request['fakehost']['ok']).to be false
|
288
288
|
end
|
289
289
|
end
|
@@ -84,6 +84,26 @@ describe Pooler do
|
|
84
84
|
expect(vm_req['debian-7-i386']['hostname']).to eq %w[sc0o4xqtodlul5w 4m4dkhqiufnjmxy]
|
85
85
|
expect(vm_req['centos-7-x86_64']['hostname']).to eq 'zb91y9qbrbf6d3q'
|
86
86
|
end
|
87
|
+
|
88
|
+
context 'with ondemand provisioning' do
|
89
|
+
let(:ondemand_response) { '{"ok":true,"request_id":"1234"}' }
|
90
|
+
it 'retreives the vm with a token' do
|
91
|
+
stub_request(:post, "#{@vmpooler_url}/ondemandvm/debian-7-i386")
|
92
|
+
.with(:headers => { 'X-Auth-Token' => 'mytokenfile' })
|
93
|
+
.to_return(:status => 200, :body => ondemand_response, :headers => {})
|
94
|
+
|
95
|
+
stub_request(:get, "#{@vmpooler_url}/ondemandvm/1234")
|
96
|
+
.to_return(:status => 200, :body => @retrieve_response_body_single, :headers => {})
|
97
|
+
|
98
|
+
vm_hash = {}
|
99
|
+
vm_hash['debian-7-i386'] = 1
|
100
|
+
Pooler.retrieve(false, vm_hash, 'mytokenfile', @vmpooler_url, 'user', {}, true)
|
101
|
+
vm_req = Pooler.check_ondemandvm(false, '1234', @vmpooler_url)
|
102
|
+
expect(vm_req).to be_an_instance_of Hash
|
103
|
+
expect(vm_req['ok']).to equal true
|
104
|
+
expect(vm_req['debian-7-i386']['hostname']).to eq 'fq6qlpjlsskycq6'
|
105
|
+
end
|
106
|
+
end
|
87
107
|
end
|
88
108
|
|
89
109
|
describe '#modify' do
|
@@ -119,11 +139,11 @@ describe Pooler do
|
|
119
139
|
.with(:headers => { 'X-Auth-Token' => 'mytokenfile' })
|
120
140
|
.to_return(:status => 200, :body => @delete_response_body_success, :headers => {})
|
121
141
|
|
122
|
-
expect(Pooler.delete(false, @vmpooler_url, ['fq6qlpjlsskycq6'], 'mytokenfile')).to eq @delete_response
|
142
|
+
expect(Pooler.delete(false, @vmpooler_url, ['fq6qlpjlsskycq6'], 'mytokenfile', nil)).to eq @delete_response
|
123
143
|
end
|
124
144
|
|
125
145
|
it 'raises a token error if no token provided' do
|
126
|
-
expect { Pooler.delete(false, @vmpooler_url, ['myfakehost'], nil) }.to raise_error(TokenError)
|
146
|
+
expect { Pooler.delete(false, @vmpooler_url, ['myfakehost'], nil, nil) }.to raise_error(TokenError)
|
127
147
|
end
|
128
148
|
end
|
129
149
|
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'vmfloaty/ssh'
|
5
|
+
|
6
|
+
class ServiceStub
|
7
|
+
def retrieve(_verbose, os_types, _use_token)
|
8
|
+
if os_types.keys[0] == 'abs_host_string'
|
9
|
+
return {
|
10
|
+
os_types.keys[0] => { 'hostname' => ['abs-hostname.delivery.puppetlabs.net'] },
|
11
|
+
'ok' => true,
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
{
|
16
|
+
os_types.keys[0] => { 'hostname' => 'vmpooler-hostname' },
|
17
|
+
'domain' => 'delivery.puppetlabs.net',
|
18
|
+
'ok' => true,
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def type
|
23
|
+
return 'abs' if os_types == 'abs_host_string'
|
24
|
+
return 'vmpooler' if os_types == 'vmpooler_host_string'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe Ssh do
|
29
|
+
before :each do
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'gets a hostname string for abs' do
|
33
|
+
verbose = false
|
34
|
+
service = ServiceStub.new
|
35
|
+
host_os = 'abs_host_string'
|
36
|
+
use_token = false
|
37
|
+
cmd = Ssh.command_string(verbose, service, host_os, use_token)
|
38
|
+
expect(cmd).to match(/ssh root@abs-hostname.delivery.puppetlabs.net/)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'gets a hostname string for vmpooler' do
|
42
|
+
verbose = false
|
43
|
+
service = ServiceStub.new
|
44
|
+
host_os = 'vmpooler_host_string'
|
45
|
+
use_token = false
|
46
|
+
cmd = Ssh.command_string(verbose, service, host_os, use_token)
|
47
|
+
expect(cmd).to match(/ssh root@vmpooler-hostname.delivery.puppetlabs.net/)
|
48
|
+
end
|
49
|
+
end
|
data/spec/vmfloaty/utils_spec.rb
CHANGED
@@ -169,7 +169,7 @@ describe Utils do
|
|
169
169
|
} }
|
170
170
|
output = '- mcpy42eqjxli9g2.delivery.mycompany.net (ubuntu-1604-x86_64, 9.66/12 hours)'
|
171
171
|
|
172
|
-
expect(
|
172
|
+
expect(STDOUT).to receive(:puts).with(output)
|
173
173
|
|
174
174
|
service = Service.new(MockOptions.new, 'url' => url)
|
175
175
|
allow(service).to receive(:query)
|
@@ -195,7 +195,7 @@ describe Utils do
|
|
195
195
|
} }
|
196
196
|
output = '- aiydvzpg23r415q.delivery.mycompany.net (redhat-7-x86_64, 7.67/48 hours, user: bob, role: agent)'
|
197
197
|
|
198
|
-
expect(
|
198
|
+
expect(STDOUT).to receive(:puts).with(output)
|
199
199
|
|
200
200
|
service = Service.new(MockOptions.new, 'url' => url)
|
201
201
|
allow(service).to receive(:query)
|
@@ -216,7 +216,7 @@ describe Utils do
|
|
216
216
|
} }
|
217
217
|
output = '- sol11-9.delivery.mycompany.net (solaris-11-sparc, 35.89h remaining)'
|
218
218
|
|
219
|
-
expect(
|
219
|
+
expect(STDOUT).to receive(:puts).with(output)
|
220
220
|
|
221
221
|
service = Service.new(MockOptions.new, 'url' => url, 'type' => 'ns')
|
222
222
|
allow(service).to receive(:query)
|
@@ -237,7 +237,7 @@ describe Utils do
|
|
237
237
|
} }
|
238
238
|
output = '- sol11-9.delivery.mycompany.net (solaris-11-sparc, 35.89h remaining, reason: testing)'
|
239
239
|
|
240
|
-
expect(
|
240
|
+
expect(STDOUT).to receive(:puts).with(output)
|
241
241
|
|
242
242
|
service = Service.new(MockOptions.new, 'url' => url, 'type' => 'ns')
|
243
243
|
allow(service).to receive(:query)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# All of the interfaces for the different services must be the
|
4
|
+
# same, otherwise there will be errors when you change the caller
|
5
|
+
# for the services from services.rb.
|
6
|
+
#
|
7
|
+
|
8
|
+
require_relative '../../lib/vmfloaty/pooler'
|
9
|
+
require_relative '../../lib/vmfloaty/abs'
|
10
|
+
require_relative '../../lib/vmfloaty/nonstandard_pooler'
|
11
|
+
|
12
|
+
shared_examples 'a vmfloaty service' do
|
13
|
+
it { is_expected.to respond_to(:delete).with(5).arguments }
|
14
|
+
it { is_expected.to respond_to(:disk).with(5).arguments }
|
15
|
+
it { is_expected.to respond_to(:list).with(3).arguments }
|
16
|
+
it { is_expected.to respond_to(:list_active).with(4).arguments }
|
17
|
+
it { is_expected.to respond_to(:modify).with(5).arguments }
|
18
|
+
it { is_expected.to respond_to(:retrieve).with(6).arguments }
|
19
|
+
it { is_expected.to respond_to(:revert).with(5).arguments }
|
20
|
+
it { is_expected.to respond_to(:query).with(3).arguments }
|
21
|
+
it { is_expected.to respond_to(:snapshot).with(4).arguments }
|
22
|
+
it { is_expected.to respond_to(:status).with(2).arguments }
|
23
|
+
it { is_expected.to respond_to(:summary).with(2).arguments }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe Pooler do
|
27
|
+
subject { Pooler }
|
28
|
+
it_behaves_like 'a vmfloaty service'
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ABS do
|
32
|
+
subject { ABS }
|
33
|
+
it_behaves_like 'a vmfloaty service'
|
34
|
+
end
|
35
|
+
|
36
|
+
describe NonstandardPooler do
|
37
|
+
subject { NonstandardPooler }
|
38
|
+
it_behaves_like 'a vmfloaty service'
|
39
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmfloaty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Cain
|
8
|
-
|
8
|
+
- Puppet
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2020-08-20 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: colorize
|
@@ -28,33 +29,40 @@ dependencies:
|
|
28
29
|
name: commander
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- - "
|
32
|
+
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: 4.4.3
|
35
|
+
- - "<"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 4.6.0
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
37
41
|
requirements:
|
38
|
-
- - "
|
42
|
+
- - ">="
|
39
43
|
- !ruby/object:Gem::Version
|
40
44
|
version: 4.4.3
|
45
|
+
- - "<"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 4.6.0
|
41
48
|
- !ruby/object:Gem::Dependency
|
42
49
|
name: faraday
|
43
50
|
requirement: !ruby/object:Gem::Requirement
|
44
51
|
requirements:
|
45
52
|
- - "~>"
|
46
53
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
54
|
+
version: 0.17.0
|
48
55
|
type: :runtime
|
49
56
|
prerelease: false
|
50
57
|
version_requirements: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
59
|
- - "~>"
|
53
60
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
61
|
+
version: 0.17.0
|
55
62
|
description: A helper tool for vmpooler to help you stay afloat
|
56
63
|
email:
|
57
64
|
- brianccain@gmail.com
|
65
|
+
- dio-gems@puppet.com
|
58
66
|
executables:
|
59
67
|
- floaty
|
60
68
|
extensions: []
|
@@ -70,6 +78,7 @@ files:
|
|
70
78
|
- lib/vmfloaty/conf.rb
|
71
79
|
- lib/vmfloaty/errors.rb
|
72
80
|
- lib/vmfloaty/http.rb
|
81
|
+
- lib/vmfloaty/logger.rb
|
73
82
|
- lib/vmfloaty/nonstandard_pooler.rb
|
74
83
|
- lib/vmfloaty/pooler.rb
|
75
84
|
- lib/vmfloaty/service.rb
|
@@ -83,12 +92,14 @@ files:
|
|
83
92
|
- spec/vmfloaty/nonstandard_pooler_spec.rb
|
84
93
|
- spec/vmfloaty/pooler_spec.rb
|
85
94
|
- spec/vmfloaty/service_spec.rb
|
95
|
+
- spec/vmfloaty/ssh_spec.rb
|
86
96
|
- spec/vmfloaty/utils_spec.rb
|
87
|
-
|
97
|
+
- spec/vmfloaty/vmfloaty_services_spec.rb
|
98
|
+
homepage: https://github.com/puppetlabs/vmfloaty
|
88
99
|
licenses:
|
89
100
|
- Apache-2.0
|
90
101
|
metadata: {}
|
91
|
-
post_install_message:
|
102
|
+
post_install_message:
|
92
103
|
rdoc_options: []
|
93
104
|
require_paths:
|
94
105
|
- lib
|
@@ -103,17 +114,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
114
|
- !ruby/object:Gem::Version
|
104
115
|
version: '0'
|
105
116
|
requirements: []
|
106
|
-
|
107
|
-
|
108
|
-
signing_key:
|
117
|
+
rubygems_version: 3.0.3
|
118
|
+
signing_key:
|
109
119
|
specification_version: 4
|
110
120
|
summary: CLI application to interface with vmpooler
|
111
121
|
test_files:
|
112
122
|
- spec/spec_helper.rb
|
123
|
+
- spec/vmfloaty/vmfloaty_services_spec.rb
|
113
124
|
- spec/vmfloaty/service_spec.rb
|
114
|
-
- spec/vmfloaty/
|
115
|
-
- spec/vmfloaty/auth_spec.rb
|
125
|
+
- spec/vmfloaty/abs/auth_spec.rb
|
116
126
|
- spec/vmfloaty/nonstandard_pooler_spec.rb
|
127
|
+
- spec/vmfloaty/ssh_spec.rb
|
128
|
+
- spec/vmfloaty/utils_spec.rb
|
117
129
|
- spec/vmfloaty/abs_spec.rb
|
130
|
+
- spec/vmfloaty/auth_spec.rb
|
118
131
|
- spec/vmfloaty/pooler_spec.rb
|
119
|
-
- spec/vmfloaty/abs/auth_spec.rb
|