vmfloaty 0.2.15 → 0.2.16
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/auth.rb +2 -2
- data/lib/vmfloaty/http.rb +3 -6
- data/lib/vmfloaty/pooler.rb +4 -6
- data/lib/vmfloaty/utils.rb +50 -0
- data/lib/vmfloaty/version.rb +1 -1
- data/lib/vmfloaty.rb +37 -40
- data/spec/vmfloaty/auth_spec.rb +1 -1
- data/spec/vmfloaty/utils_spec.rb +34 -0
- metadata +5 -5
- data/lib/vmfloaty/format.rb +0 -19
- data/spec/vmfloaty/format_spec.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a1ad61f6bedb9c15e1b21bc4f2dd15318cf9303
|
4
|
+
data.tar.gz: ab8a768ccf3e445dec61240b1e03ea50f2f14958
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ed7675e01385ec0b5d1339fc5a5d3392ef28b5eae58ebd8cc26f9f4956e2679d0fc9af3267f58482cbf6b92acd5ecc1d0db8d1441e85be1141037fe9d23e0f3
|
7
|
+
data.tar.gz: 2bbbc795099999f7c0a076d748f42f7f757842822f15a7217892dbe68e2046fbb7847c79a9f62470498783042d915d92839c7801130af0914903835c0dd96cc2
|
data/lib/vmfloaty/auth.rb
CHANGED
@@ -29,7 +29,7 @@ class Auth
|
|
29
29
|
response = conn.delete "/token/#{token}"
|
30
30
|
res_body = JSON.parse(response.body)
|
31
31
|
if res_body["ok"]
|
32
|
-
|
32
|
+
return res_body
|
33
33
|
else
|
34
34
|
STDERR.puts "There was a problem with your request:"
|
35
35
|
puts res_body
|
@@ -49,7 +49,7 @@ class Auth
|
|
49
49
|
res_body = JSON.parse(response.body)
|
50
50
|
|
51
51
|
if res_body["ok"]
|
52
|
-
res_body
|
52
|
+
return res_body
|
53
53
|
else
|
54
54
|
STDERR.puts "There was a problem with your request:"
|
55
55
|
puts res_body
|
data/lib/vmfloaty/http.rb
CHANGED
@@ -3,8 +3,7 @@ require 'faraday'
|
|
3
3
|
class Http
|
4
4
|
def self.get_conn(verbose, url)
|
5
5
|
if url.nil?
|
6
|
-
|
7
|
-
exit 1
|
6
|
+
raise "Did not provide a url to connect to"
|
8
7
|
end
|
9
8
|
|
10
9
|
conn = Faraday.new(:url => url, :ssl => {:verify => false}) do |faraday|
|
@@ -18,13 +17,11 @@ class Http
|
|
18
17
|
|
19
18
|
def self.get_conn_with_auth(verbose, url, user, password)
|
20
19
|
if url.nil?
|
21
|
-
|
22
|
-
exit 1
|
20
|
+
raise "Did not provide a url to connect to"
|
23
21
|
end
|
24
22
|
|
25
23
|
if user.nil?
|
26
|
-
|
27
|
-
exit 1
|
24
|
+
raise "You did not provide a user to authenticate with"
|
28
25
|
end
|
29
26
|
|
30
27
|
conn = Faraday.new(:url => url, :ssl => {:verify => false}) do |faraday|
|
data/lib/vmfloaty/pooler.rb
CHANGED
@@ -34,8 +34,7 @@ class Pooler
|
|
34
34
|
os_string = os_string.chomp("+")
|
35
35
|
|
36
36
|
if os_string.size == 0
|
37
|
-
|
38
|
-
exit 1
|
37
|
+
raise "No operating systems provided to obtain. See `floaty get --help` for more information on how to get VMs."
|
39
38
|
end
|
40
39
|
|
41
40
|
response = conn.post "/vm/#{os_string}"
|
@@ -44,9 +43,7 @@ class Pooler
|
|
44
43
|
if res_body["ok"]
|
45
44
|
res_body
|
46
45
|
else
|
47
|
-
|
48
|
-
STDERR.puts res_body
|
49
|
-
exit 1
|
46
|
+
raise "Failed to obtain VMs from the pooler at #{url}/vm/#{os_string}. #{res_body}"
|
50
47
|
end
|
51
48
|
end
|
52
49
|
|
@@ -85,7 +82,8 @@ class Pooler
|
|
85
82
|
if res_body['ok']
|
86
83
|
puts "Deletion for vm #{host} successfully scheduled"
|
87
84
|
else
|
88
|
-
STDERR.puts "There was a problem with your request for vm #{host}"
|
85
|
+
STDERR.puts "There was a problem with your request for vm #{host}."
|
86
|
+
STDERR.puts res_body
|
89
87
|
end
|
90
88
|
end
|
91
89
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
|
2
|
+
require 'vmfloaty/pooler'
|
3
|
+
|
4
|
+
class Utils
|
5
|
+
# TODO: Takes the json response body from an HTTP GET
|
6
|
+
# request and "pretty prints" it
|
7
|
+
def self.format_hosts(hostname_hash)
|
8
|
+
host_hash = {}
|
9
|
+
|
10
|
+
hostname_hash.delete("ok")
|
11
|
+
hostname_hash.each do |type, hosts|
|
12
|
+
if type == "domain"
|
13
|
+
host_hash[type] = hosts
|
14
|
+
else
|
15
|
+
host_hash[type] = hosts["hostname"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
host_hash.to_json
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.generate_os_hash(os_args)
|
23
|
+
# expects args to look like:
|
24
|
+
# ["centos", "debian=5", "windows=1"]
|
25
|
+
|
26
|
+
# Build vm hash where
|
27
|
+
#
|
28
|
+
# [operating_system_type1 -> total,
|
29
|
+
# operating_system_type2 -> total,
|
30
|
+
# ...]
|
31
|
+
os_types = {}
|
32
|
+
os_args.each do |arg|
|
33
|
+
os_arr = arg.split("=")
|
34
|
+
if os_arr.size == 1
|
35
|
+
# assume they didn't specify an = sign if split returns 1 size
|
36
|
+
os_types[os_arr[0]] = 1
|
37
|
+
else
|
38
|
+
os_types[os_arr[0]] = os_arr[1].to_i
|
39
|
+
end
|
40
|
+
end
|
41
|
+
os_types
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.prettyprint_hosts(hosts)
|
45
|
+
puts "Running VMs:"
|
46
|
+
hosts.each do |vm|
|
47
|
+
puts "- #{vm}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/vmfloaty/version.rb
CHANGED
data/lib/vmfloaty.rb
CHANGED
@@ -7,7 +7,7 @@ require 'vmfloaty/auth'
|
|
7
7
|
require 'vmfloaty/pooler'
|
8
8
|
require 'vmfloaty/version'
|
9
9
|
require 'vmfloaty/conf'
|
10
|
-
require 'vmfloaty/
|
10
|
+
require 'vmfloaty/utils'
|
11
11
|
|
12
12
|
class Vmfloaty
|
13
13
|
include Commander::Methods
|
@@ -22,7 +22,7 @@ class Vmfloaty
|
|
22
22
|
c.syntax = 'floaty get os_type1=x ox_type2=y ...'
|
23
23
|
c.summary = 'Gets a vm or vms based on the os flag'
|
24
24
|
c.description = ''
|
25
|
-
c.example 'Gets 3 vms', 'floaty get centos=3 debian
|
25
|
+
c.example 'Gets 3 vms', 'floaty get centos=3 debian --user brian --url http://vmpooler.example.com'
|
26
26
|
c.option '--verbose', 'Enables verbose output'
|
27
27
|
c.option '--user STRING', String, 'User to authenticate with'
|
28
28
|
c.option '--url STRING', String, 'URL of vmpooler'
|
@@ -33,40 +33,36 @@ class Vmfloaty
|
|
33
33
|
token = options.token || config['token']
|
34
34
|
user = options.user ||= config['user']
|
35
35
|
url = options.url ||= config['url']
|
36
|
+
no_token = options.notoken
|
36
37
|
|
37
38
|
if args.empty?
|
38
|
-
STDERR.puts "
|
39
|
-
|
40
|
-
|
41
|
-
os_types = {}
|
42
|
-
args.each do |arg|
|
43
|
-
os_arr = arg.split("=")
|
44
|
-
if os_arr.size == 1
|
45
|
-
# assume they didn't specify an = sign if split returns 1 size
|
46
|
-
os_types[os_arr[0]] = 1
|
47
|
-
else
|
48
|
-
os_types[os_arr[0]] = os_arr[1].to_i
|
49
|
-
end
|
39
|
+
STDERR.puts "No operating systems provided to obtain. See `floaty get --help` for more information on how to get VMs."
|
40
|
+
exit 1
|
50
41
|
end
|
51
42
|
|
52
|
-
|
53
|
-
|
54
|
-
if no_token
|
55
|
-
response = Pooler.retrieve(verbose, os_types, nil, url)
|
56
|
-
puts response
|
57
|
-
return
|
58
|
-
end
|
43
|
+
os_types = Utils.generate_os_hash(args)
|
59
44
|
|
60
|
-
unless
|
61
|
-
|
62
|
-
|
63
|
-
|
45
|
+
unless os_types.empty?
|
46
|
+
if no_token
|
47
|
+
response = Pooler.retrieve(verbose, os_types, nil, url)
|
48
|
+
puts response
|
49
|
+
exit 0
|
50
|
+
else
|
51
|
+
unless token
|
52
|
+
puts "No token found. Retrieving a token..."
|
53
|
+
pass = password "Enter your password please:", '*'
|
54
|
+
token = Auth.get_token(verbose, url, user, pass)
|
55
|
+
puts "\nToken retrieved!"
|
56
|
+
puts token
|
57
|
+
end
|
64
58
|
|
65
|
-
|
66
|
-
|
67
|
-
|
59
|
+
response = Pooler.retrieve(verbose, os_types, token, url)
|
60
|
+
puts Utils.format_hosts(response)
|
61
|
+
exit 0
|
62
|
+
end
|
68
63
|
else
|
69
|
-
puts
|
64
|
+
STDERR.puts "No operating systems provided to obtain. See `floaty get --help` for more information on how to get VMs."
|
65
|
+
exit 1
|
70
66
|
end
|
71
67
|
end
|
72
68
|
end
|
@@ -127,7 +123,7 @@ class Vmfloaty
|
|
127
123
|
if modify_req["ok"]
|
128
124
|
puts "Successfully modified vm #{hostname}."
|
129
125
|
else
|
130
|
-
STDERR.puts "
|
126
|
+
STDERR.puts "Could not modify given host #{hostname} at #{url}."
|
131
127
|
puts modify_req
|
132
128
|
exit 1
|
133
129
|
end
|
@@ -163,10 +159,7 @@ class Vmfloaty
|
|
163
159
|
running_vms = vms['running']
|
164
160
|
|
165
161
|
if ! running_vms.nil?
|
166
|
-
|
167
|
-
running_vms.each do |vm|
|
168
|
-
puts "- #{vm}"
|
169
|
-
end
|
162
|
+
Utils.prettyprint_hosts(running_vms)
|
170
163
|
# query y/n
|
171
164
|
puts ""
|
172
165
|
ans = agree("Delete all VMs associated with token #{token}? [y/N]")
|
@@ -182,10 +175,11 @@ class Vmfloaty
|
|
182
175
|
if hostnames.nil?
|
183
176
|
STDERR.puts "You did not provide any hosts to delete"
|
184
177
|
exit 1
|
178
|
+
else
|
179
|
+
hosts = hostnames.split(',')
|
180
|
+
Pooler.delete(verbose, url, hosts, token)
|
181
|
+
exit 0
|
185
182
|
end
|
186
|
-
|
187
|
-
hosts = hostnames.split(',')
|
188
|
-
Pooler.delete(verbose, url, hosts, token)
|
189
183
|
end
|
190
184
|
end
|
191
185
|
|
@@ -280,12 +274,15 @@ class Vmfloaty
|
|
280
274
|
case action
|
281
275
|
when "get"
|
282
276
|
pass = password "Enter your password please:", '*'
|
283
|
-
|
277
|
+
token = Auth.get_token(verbose, url, user, pass)
|
278
|
+
puts token
|
284
279
|
when "delete"
|
285
280
|
pass = password "Enter your password please:", '*'
|
286
|
-
Auth.delete_token(verbose, url, user, pass, token)
|
281
|
+
result = Auth.delete_token(verbose, url, user, pass, token)
|
282
|
+
puts result
|
287
283
|
when "status"
|
288
|
-
|
284
|
+
status = Auth.token_status(verbose, url, token)
|
285
|
+
puts status
|
289
286
|
when nil
|
290
287
|
STDERR.puts "No action provided"
|
291
288
|
else
|
data/spec/vmfloaty/auth_spec.rb
CHANGED
@@ -33,7 +33,7 @@ describe Pooler do
|
|
33
33
|
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.1'}).
|
34
34
|
to_return(:status => 200, :body => @delete_token_response, :headers => {})
|
35
35
|
|
36
|
-
|
36
|
+
expect(Auth.delete_token(false, @vmpooler_url, "first.last", "password", @token)).to eq JSON.parse(@delete_token_response)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json'
|
3
|
+
require_relative '../../lib/vmfloaty/utils'
|
4
|
+
|
5
|
+
describe Utils do
|
6
|
+
|
7
|
+
describe "#get_hosts" do
|
8
|
+
before :each do
|
9
|
+
@hostname_hash = "{\"ok\":true,\"debian-7-i386\":{\"hostname\":[\"sc0o4xqtodlul5w\",\"4m4dkhqiufnjmxy\"]},\"debian-7-x86_64\":{\"hostname\":\"zb91y9qbrbf6d3q\"},\"domain\":\"company.com\"}"
|
10
|
+
@format_hash = "{\"debian-7-i386\":[\"sc0o4xqtodlul5w\",\"4m4dkhqiufnjmxy\"],\"debian-7-x86_64\":\"zb91y9qbrbf6d3q\",\"domain\":\"company.com\"}"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "formats a hostname hash into os, hostnames, and domain name" do
|
14
|
+
|
15
|
+
expect(Utils.format_hosts(JSON.parse(@hostname_hash))).to eq @format_hash
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#generate_os_hash" do
|
20
|
+
before :each do
|
21
|
+
@host_hash = {"centos"=>1, "debian"=>5, "windows"=>1}
|
22
|
+
end
|
23
|
+
|
24
|
+
it "takes an array of os arguments and returns a formatted hash" do
|
25
|
+
host_arg = ["centos", "debian=5", "windows=1"]
|
26
|
+
expect(Utils.generate_os_hash(host_arg)).to eq @host_hash
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns an empty hash if there are no arguments provided" do
|
30
|
+
host_arg = []
|
31
|
+
expect(Utils.generate_os_hash(host_arg)).to be_empty
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmfloaty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Cain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -52,14 +52,14 @@ files:
|
|
52
52
|
- lib/vmfloaty.rb
|
53
53
|
- lib/vmfloaty/auth.rb
|
54
54
|
- lib/vmfloaty/conf.rb
|
55
|
-
- lib/vmfloaty/format.rb
|
56
55
|
- lib/vmfloaty/http.rb
|
57
56
|
- lib/vmfloaty/pooler.rb
|
57
|
+
- lib/vmfloaty/utils.rb
|
58
58
|
- lib/vmfloaty/version.rb
|
59
59
|
- spec/spec_helper.rb
|
60
60
|
- spec/vmfloaty/auth_spec.rb
|
61
|
-
- spec/vmfloaty/format_spec.rb
|
62
61
|
- spec/vmfloaty/pooler_spec.rb
|
62
|
+
- spec/vmfloaty/utils_spec.rb
|
63
63
|
homepage: https://github.com/briancain/vmfloaty
|
64
64
|
licenses:
|
65
65
|
- Apache
|
@@ -87,5 +87,5 @@ summary: CLI application to interface with vmpooler
|
|
87
87
|
test_files:
|
88
88
|
- spec/spec_helper.rb
|
89
89
|
- spec/vmfloaty/auth_spec.rb
|
90
|
-
- spec/vmfloaty/format_spec.rb
|
91
90
|
- spec/vmfloaty/pooler_spec.rb
|
91
|
+
- spec/vmfloaty/utils_spec.rb
|
data/lib/vmfloaty/format.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
|
2
|
-
class Format
|
3
|
-
# TODO: Takes the json response body from an HTTP GET
|
4
|
-
# request and "pretty prints" it
|
5
|
-
def self.get_hosts(hostname_hash)
|
6
|
-
host_hash = {}
|
7
|
-
|
8
|
-
hostname_hash.delete("ok")
|
9
|
-
hostname_hash.each do |type, hosts|
|
10
|
-
if type == "domain"
|
11
|
-
host_hash[type] = hosts
|
12
|
-
else
|
13
|
-
host_hash[type] = hosts["hostname"]
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
host_hash.to_json
|
18
|
-
end
|
19
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'json'
|
3
|
-
require_relative '../../lib/vmfloaty/format'
|
4
|
-
|
5
|
-
describe Pooler do
|
6
|
-
|
7
|
-
describe "#get_hosts" do
|
8
|
-
before :each do
|
9
|
-
@hostname_hash = "{\"ok\":true,\"debian-7-i386\":{\"hostname\":[\"sc0o4xqtodlul5w\",\"4m4dkhqiufnjmxy\"]},\"debian-7-x86_64\":{\"hostname\":\"zb91y9qbrbf6d3q\"},\"domain\":\"company.com\"}"
|
10
|
-
@format_hash = "{\"debian-7-i386\":[\"sc0o4xqtodlul5w\",\"4m4dkhqiufnjmxy\"],\"debian-7-x86_64\":\"zb91y9qbrbf6d3q\",\"domain\":\"company.com\"}"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "formats a hostname hash into os, hostnames, and domain name" do
|
14
|
-
|
15
|
-
expect(Format.get_hosts(JSON.parse(@hostname_hash))).to eq @format_hash
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|