vmfloaty 0.9.0 → 0.11.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/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
|