vmfloaty 0.6.2 → 0.7.0
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/lib/vmfloaty.rb +73 -41
- data/lib/vmfloaty/auth.rb +6 -10
- data/lib/vmfloaty/errors.rb +17 -0
- data/lib/vmfloaty/pooler.rb +9 -2
- data/lib/vmfloaty/version.rb +1 -1
- data/spec/vmfloaty/auth_spec.rb +32 -0
- data/spec/vmfloaty/pooler_spec.rb +10 -0
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bfa904ec8ca9ec10fa9c6c9571d5ebbb3a0647e
|
4
|
+
data.tar.gz: c6d347f9075dd4ecf5056ae39c4ff4f5f2b7e6e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 231d4ef21dc8ebb75b57511c4e4d33d8c77b2b0566027973c0a9e9cc790bc79a9bca532ab433b42600473e9811e867523a74927988524a11b4330542b639b85c
|
7
|
+
data.tar.gz: 88b32545eae35d0b49e366c5883052b20dcb38445c4ae534987b7de0bbb6246635ca5004c5cd8e095308692e0c817649655cf82aceab02b38a27bb380bb6d26f
|
data/lib/vmfloaty.rb
CHANGED
@@ -45,24 +45,45 @@ class Vmfloaty
|
|
45
45
|
|
46
46
|
unless os_types.empty?
|
47
47
|
if no_token
|
48
|
-
|
48
|
+
begin
|
49
|
+
response = Pooler.retrieve(verbose, os_types, nil, url)
|
50
|
+
rescue MissingParamError
|
51
|
+
STDERR.puts e
|
52
|
+
STDERR.puts "See `floaty get --help` for more information on how to get VMs."
|
53
|
+
rescue AuthError => e
|
54
|
+
STDERR.puts e
|
55
|
+
exit 1
|
56
|
+
end
|
49
57
|
puts Utils.format_hosts(response)
|
50
58
|
exit 0
|
51
59
|
else
|
52
60
|
unless token
|
53
61
|
puts "No token found. Retrieving a token..."
|
54
62
|
if !user
|
55
|
-
|
63
|
+
STDERR.puts "You did not provide a user to authenticate to vmpooler with"
|
64
|
+
exit 1
|
56
65
|
end
|
57
66
|
pass = password "Enter your password please:", '*'
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
puts
|
67
|
+
begin
|
68
|
+
token = Auth.get_token(verbose, url, user, pass)
|
69
|
+
rescue TokenError => e
|
70
|
+
STDERR.puts e
|
71
|
+
exit 1
|
62
72
|
end
|
73
|
+
|
74
|
+
puts "\nToken retrieved!"
|
75
|
+
puts token
|
63
76
|
end
|
64
77
|
|
65
|
-
|
78
|
+
begin
|
79
|
+
response = Pooler.retrieve(verbose, os_types, token, url)
|
80
|
+
rescue MissingParamError
|
81
|
+
STDERR.puts e
|
82
|
+
STDERR.puts "See `floaty get --help` for more information on how to get VMs."
|
83
|
+
rescue AuthError => e
|
84
|
+
STDERR.puts e
|
85
|
+
exit 1
|
86
|
+
end
|
66
87
|
puts Utils.format_hosts(response)
|
67
88
|
exit 0
|
68
89
|
end
|
@@ -91,16 +112,18 @@ class Vmfloaty
|
|
91
112
|
|
92
113
|
if active
|
93
114
|
# list active vms
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
115
|
+
begin
|
116
|
+
status = Auth.token_status(verbose, url, token)
|
117
|
+
rescue TokenError => e
|
118
|
+
STDERR.puts e
|
119
|
+
exit 1
|
120
|
+
end
|
121
|
+
|
122
|
+
# print vms
|
123
|
+
vms = status[token]['vms']
|
124
|
+
if vms.nil?
|
125
|
+
STDERR.puts "You have no running vms"
|
126
|
+
exit 0
|
104
127
|
end
|
105
128
|
|
106
129
|
running_vms = vms['running']
|
@@ -199,10 +222,10 @@ class Vmfloaty
|
|
199
222
|
|
200
223
|
if delete_all
|
201
224
|
# get vms with token
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
STDERR.puts
|
225
|
+
begin
|
226
|
+
status = Auth.token_status(verbose, url, token)
|
227
|
+
rescue TokenError => e
|
228
|
+
STDERR.puts e
|
206
229
|
exit 1
|
207
230
|
end
|
208
231
|
|
@@ -348,27 +371,33 @@ class Vmfloaty
|
|
348
371
|
case action
|
349
372
|
when "get"
|
350
373
|
pass = password "Enter your password please:", '*'
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
374
|
+
begin
|
375
|
+
token = Auth.get_token(verbose, url, user, pass)
|
376
|
+
rescue TokenError => e
|
377
|
+
STDERR.puts e
|
378
|
+
exit 1
|
356
379
|
end
|
380
|
+
puts token
|
381
|
+
exit 0
|
357
382
|
when "delete"
|
358
383
|
pass = password "Enter your password please:", '*'
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
384
|
+
begin
|
385
|
+
result = Auth.delete_token(verbose, url, user, pass, token)
|
386
|
+
rescue TokenError => e
|
387
|
+
STDERR.puts e
|
388
|
+
exit 1
|
364
389
|
end
|
390
|
+
puts result
|
391
|
+
exit 0
|
365
392
|
when "status"
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
393
|
+
begin
|
394
|
+
status = Auth.token_status(verbose, url, token)
|
395
|
+
rescue TokenError => e
|
396
|
+
STDERR.puts e
|
397
|
+
exit 1
|
371
398
|
end
|
399
|
+
puts status
|
400
|
+
exit 0
|
372
401
|
when nil
|
373
402
|
STDERR.puts "No action provided"
|
374
403
|
else
|
@@ -404,15 +433,18 @@ class Vmfloaty
|
|
404
433
|
if !no_token && !token
|
405
434
|
puts "No token found. Retrieving a token..."
|
406
435
|
if !user
|
407
|
-
|
436
|
+
STDERR.puts "You did not provide a user to authenticate to vmpooler with"
|
437
|
+
exit 1
|
408
438
|
end
|
409
439
|
pass = password "Enter your password please:", '*'
|
410
|
-
|
411
|
-
|
440
|
+
begin
|
441
|
+
token = Auth.get_token(verbose, url, user, pass)
|
442
|
+
rescue TokenError => e
|
443
|
+
STDERR.puts e
|
444
|
+
STDERR.puts 'Could not get token...requesting vm without a token anyway...'
|
445
|
+
else
|
412
446
|
puts "\nToken retrieved!"
|
413
447
|
puts token
|
414
|
-
else
|
415
|
-
STDERR.puts 'Could not get token...requesting vm without a token anyway...'
|
416
448
|
end
|
417
449
|
end
|
418
450
|
|
data/lib/vmfloaty/auth.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'json'
|
3
3
|
require 'vmfloaty/http'
|
4
|
+
require 'vmfloaty/errors'
|
4
5
|
|
5
6
|
class Auth
|
6
7
|
def self.get_token(verbose, url, user, password)
|
@@ -12,15 +13,13 @@ class Auth
|
|
12
13
|
if res_body["ok"]
|
13
14
|
return res_body["token"]
|
14
15
|
else
|
15
|
-
|
16
|
-
return nil
|
16
|
+
raise TokenError, "HTTP #{resp.status}: There was a problem requesting a token:\n#{res_body}"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.delete_token(verbose, url, user, password, token)
|
21
21
|
if token.nil?
|
22
|
-
|
23
|
-
return nil
|
22
|
+
raise TokenError, 'You did not provide a token'
|
24
23
|
end
|
25
24
|
|
26
25
|
conn = Http.get_conn_with_auth(verbose, url, user, password)
|
@@ -30,15 +29,13 @@ class Auth
|
|
30
29
|
if res_body["ok"]
|
31
30
|
return res_body
|
32
31
|
else
|
33
|
-
|
34
|
-
return nil
|
32
|
+
raise TokenError, "HTTP #{response.status}: There was a problem deleting a token:\n#{res_body}"
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
38
36
|
def self.token_status(verbose, url, token)
|
39
37
|
if token.nil?
|
40
|
-
|
41
|
-
return nil
|
38
|
+
raise TokenError, 'You did not provide a token'
|
42
39
|
end
|
43
40
|
|
44
41
|
conn = Http.get_conn(verbose, url)
|
@@ -49,8 +46,7 @@ class Auth
|
|
49
46
|
if res_body["ok"]
|
50
47
|
return res_body
|
51
48
|
else
|
52
|
-
|
53
|
-
return nil
|
49
|
+
raise TokenError, "HTTP #{response.status}: There was a problem getting the status of a token:\n#{res_body}"
|
54
50
|
end
|
55
51
|
end
|
56
52
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AuthError < StandardError
|
2
|
+
def initialize(msg="Could not authenticate to pooler")
|
3
|
+
super
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class TokenError < StandardError
|
8
|
+
def initialize(msg="Could not do operation with token provided")
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class MissingParamError < StandardError
|
14
|
+
def initialize(msg="Argument provided to function is missing")
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
data/lib/vmfloaty/pooler.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'vmfloaty/http'
|
3
3
|
require 'json'
|
4
|
+
require 'vmfloaty/errors'
|
4
5
|
|
5
6
|
class Pooler
|
6
7
|
def self.list(verbose, url, os_filter=nil)
|
@@ -19,6 +20,9 @@ class Pooler
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def self.retrieve(verbose, os_type, token, url)
|
23
|
+
# NOTE:
|
24
|
+
# Developers can use `Utils.generate_os_hash` to
|
25
|
+
# generate the os_type param.
|
22
26
|
conn = Http.get_conn(verbose, url)
|
23
27
|
if token
|
24
28
|
conn.headers['X-AUTH-TOKEN'] = token
|
@@ -34,16 +38,19 @@ class Pooler
|
|
34
38
|
os_string = os_string.chomp("+")
|
35
39
|
|
36
40
|
if os_string.size == 0
|
37
|
-
raise "No operating systems provided to obtain.
|
41
|
+
raise MissingParamError, "No operating systems provided to obtain."
|
38
42
|
end
|
39
43
|
|
40
44
|
response = conn.post "vm/#{os_string}"
|
41
45
|
|
42
46
|
res_body = JSON.parse(response.body)
|
47
|
+
|
43
48
|
if res_body["ok"]
|
44
49
|
res_body
|
50
|
+
elsif response.status == 401
|
51
|
+
raise AuthError, "HTTP #{response.status}: The token provided could not authenticate to the pooler.\n#{res_body}"
|
45
52
|
else
|
46
|
-
raise "Failed to obtain VMs from the pooler at #{url}/vm/#{os_string}. #{res_body}"
|
53
|
+
raise "HTTP #{response.status}: Failed to obtain VMs from the pooler at #{url}/vm/#{os_string}. #{res_body}"
|
47
54
|
end
|
48
55
|
end
|
49
56
|
|
data/lib/vmfloaty/version.rb
CHANGED
data/spec/vmfloaty/auth_spec.rb
CHANGED
@@ -20,6 +20,14 @@ describe Pooler do
|
|
20
20
|
token = Auth.get_token(false, @vmpooler_url, "first.last", "password")
|
21
21
|
expect(token).to eq @token
|
22
22
|
end
|
23
|
+
|
24
|
+
it "raises a token error if something goes wrong" do
|
25
|
+
stub_request(:post, "https://first.last:password@vmpooler.example.com/token").
|
26
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'0', 'User-Agent'=>'Faraday v0.9.2'}).
|
27
|
+
to_return(:status => 500, :body => "{\"ok\":false}", :headers => {})
|
28
|
+
|
29
|
+
expect{ Auth.get_token(false, @vmpooler_url, "first.last", "password") }.to raise_error(TokenError)
|
30
|
+
end
|
23
31
|
end
|
24
32
|
|
25
33
|
describe "#delete_token" do
|
@@ -35,6 +43,18 @@ describe Pooler do
|
|
35
43
|
|
36
44
|
expect(Auth.delete_token(false, @vmpooler_url, "first.last", "password", @token)).to eq JSON.parse(@delete_token_response)
|
37
45
|
end
|
46
|
+
|
47
|
+
it "raises a token error if something goes wrong" do
|
48
|
+
stub_request(:delete, "https://first.last:password@vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y").
|
49
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.2'}).
|
50
|
+
to_return(:status => 500, :body => "{\"ok\":false}", :headers => {})
|
51
|
+
|
52
|
+
expect{ Auth.delete_token(false, @vmpooler_url, "first.last", "password", @token) }.to raise_error(TokenError)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "raises a token error if no token provided" do
|
56
|
+
expect{ Auth.delete_token(false, @vmpooler_url, "first.last", "password", nil) }.to raise_error(TokenError)
|
57
|
+
end
|
38
58
|
end
|
39
59
|
|
40
60
|
describe "#token_status" do
|
@@ -50,5 +70,17 @@ describe Pooler do
|
|
50
70
|
|
51
71
|
expect(Auth.token_status(false, @vmpooler_url, @token)).to eq JSON.parse(@token_status_response)
|
52
72
|
end
|
73
|
+
|
74
|
+
it "raises a token error if something goes wrong" do
|
75
|
+
stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y").
|
76
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.2'}).
|
77
|
+
to_return(:status => 500, :body => "{\"ok\":false}", :headers => {})
|
78
|
+
|
79
|
+
expect{ Auth.token_status(false, @vmpooler_url, @token) }.to raise_error(TokenError)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "raises a token error if no token provided" do
|
83
|
+
expect{ Auth.token_status(false, @vmpooler_url, nil) }.to raise_error(TokenError)
|
84
|
+
end
|
53
85
|
end
|
54
86
|
end
|
@@ -44,6 +44,16 @@ describe Pooler do
|
|
44
44
|
@retrieve_response_body_double = "{\"ok\":true,\"debian-7-i386\":{\"hostname\":[\"sc0o4xqtodlul5w\",\"4m4dkhqiufnjmxy\"]},\"centos-7-x86_64\":{\"hostname\":\"zb91y9qbrbf6d3q\"}}"
|
45
45
|
end
|
46
46
|
|
47
|
+
it "raises an AuthError if the token is invalid" do
|
48
|
+
stub_request(:post, "#{@vmpooler_url}/vm/debian-7-i386").
|
49
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'0', 'User-Agent'=>'Faraday v0.9.2', 'X-Auth-Token'=>'mytokenfile'}).
|
50
|
+
to_return(:status => 401, :body => "{\"ok\":false}", :headers => {})
|
51
|
+
|
52
|
+
vm_hash = {}
|
53
|
+
vm_hash['debian-7-i386'] = 1
|
54
|
+
expect{ Pooler.retrieve(false, vm_hash, 'mytokenfile', @vmpooler_url) }.to raise_error(AuthError)
|
55
|
+
end
|
56
|
+
|
47
57
|
it "retrieves a single vm with a token" do
|
48
58
|
stub_request(:post, "#{@vmpooler_url}/vm/debian-7-i386").
|
49
59
|
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'0', 'User-Agent'=>'Faraday v0.9.2', 'X-Auth-Token'=>'mytokenfile'}).
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmfloaty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Cain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0.9'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.9'
|
41
41
|
description: A helper tool for vmpooler to help you stay afloat
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/vmfloaty.rb
|
53
53
|
- lib/vmfloaty/auth.rb
|
54
54
|
- lib/vmfloaty/conf.rb
|
55
|
+
- lib/vmfloaty/errors.rb
|
55
56
|
- lib/vmfloaty/http.rb
|
56
57
|
- lib/vmfloaty/pooler.rb
|
57
58
|
- lib/vmfloaty/ssh.rb
|
@@ -71,17 +72,17 @@ require_paths:
|
|
71
72
|
- lib
|
72
73
|
required_ruby_version: !ruby/object:Gem::Requirement
|
73
74
|
requirements:
|
74
|
-
- -
|
75
|
+
- - ">="
|
75
76
|
- !ruby/object:Gem::Version
|
76
77
|
version: '0'
|
77
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
79
|
requirements:
|
79
|
-
- -
|
80
|
+
- - ">="
|
80
81
|
- !ruby/object:Gem::Version
|
81
82
|
version: '0'
|
82
83
|
requirements: []
|
83
84
|
rubyforge_project:
|
84
|
-
rubygems_version: 2.4.
|
85
|
+
rubygems_version: 2.4.5.1
|
85
86
|
signing_key:
|
86
87
|
specification_version: 4
|
87
88
|
summary: CLI application to interface with vmpooler
|