vmfloaty 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c54d93e6680a539d4eb2b3b9ff25c664b5d9f4f
4
- data.tar.gz: 03eb1dc1ad20c59f57fc6479f140510752a6bd07
3
+ metadata.gz: f4250176fe87450914f6c5abe68dabc6e21a6d60
4
+ data.tar.gz: f7c45fcbf597a7c09f5b233eaba6e91265494502
5
5
  SHA512:
6
- metadata.gz: cbdf78e59753019035e7bec56ec5fc8d254e06edf9ed46e616b0bf2529b2cd520406a77f6b311cf65f5b37043442ab23f34998e79334ba18dff634e95b9c8ed5
7
- data.tar.gz: 0e9fdea1096ed68c5286beb69f2113b58104ba716e6b0d4aab2d0af7ec5c855e4873ce73e8415c9f103ebc5e01a8aaccd4d349733b98285698b128043358aa72
6
+ metadata.gz: 20fc4fc84ae8362c9967f0334979b4f7a71517e9ff10c980930dca0f5f558a7cec59c437b3da3412ec50a696fac35ff6a07d13967365c0db02541b694bb61732
7
+ data.tar.gz: a2a7481706d4845426c5c38d4bb0722e5968301fc9a935f1f80568aea28dc1e0f2d4c20ebfea966f8bf580807821d44e8ba2679a4737889085e4ad2b55d4a50c
data/lib/vmfloaty.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'commander'
5
+ require 'pp'
5
6
  require 'vmfloaty/auth'
6
7
  require 'vmfloaty/pooler'
7
8
  require 'vmfloaty/version'
@@ -33,10 +34,6 @@ class Vmfloaty
33
34
  user = options.user ||= config['user']
34
35
  url = options.url ||= config['url']
35
36
 
36
- if args.empty?
37
- STDERR.puts "You did not provide any vms to grab"
38
- end
39
-
40
37
  os_types = {}
41
38
  args.each do |arg|
42
39
  os_arr = arg.split("=")
@@ -58,7 +55,7 @@ class Vmfloaty
58
55
 
59
56
  unless os_types.nil?
60
57
  response = Pooler.retrieve(verbose, os_types, token, url)
61
- puts response
58
+ Format.get_hosts(response)
62
59
  else
63
60
  puts 'You did not provide an OS to get'
64
61
  end
@@ -94,8 +91,8 @@ class Vmfloaty
94
91
  url = options.url ||= config['url']
95
92
  hostname = args[0]
96
93
 
97
- query = Pooler.query(verbose, url, hostname)
98
- puts query
94
+ query_req = Pooler.query(verbose, url, hostname)
95
+ pp query_req
99
96
  end
100
97
  end
101
98
 
@@ -117,8 +114,10 @@ class Vmfloaty
117
114
  tags = JSON.parse(options.tags) if options.tags
118
115
  token = options.token || config['token']
119
116
 
120
- res_body = Pooler.modify(verbose, url, hostname, token, lifetime, tags)
121
- puts res_body
117
+ modify_req = Pooler.modify(verbose, url, hostname, token, lifetime, tags)
118
+ if modify_req["ok"]
119
+ puts "Successfully modified vm #{hostname}.")
120
+ end
122
121
  end
123
122
  end
124
123
 
@@ -154,8 +153,8 @@ class Vmfloaty
154
153
  hostname = args[0]
155
154
  token = options.token ||= config['token']
156
155
 
157
- res_body = Pooler.snapshot(verbose, url, hostname, token)
158
- puts res_body
156
+ snapshot_req = Pooler.snapshot(verbose, url, hostname, token)
157
+ pp snapshot_req
159
158
  end
160
159
  end
161
160
 
@@ -175,8 +174,8 @@ class Vmfloaty
175
174
  token = options.token || config['token']
176
175
  snapshot_sha = options.snapshot
177
176
 
178
- res_body = Pooler.revert(verbose, url, hostname, token, snapshot_sha)
179
- puts res_body
177
+ revert_req = Pooler.revert(verbose, url, hostname, token, snapshot_sha)
178
+ pp revert_req
180
179
  end
181
180
  end
182
181
 
@@ -192,7 +191,7 @@ class Vmfloaty
192
191
  url = options.url ||= config['url']
193
192
 
194
193
  status = Pooler.status(verbose, url)
195
- puts status
194
+ pp status
196
195
  end
197
196
  end
198
197
 
@@ -208,7 +207,7 @@ class Vmfloaty
208
207
  url = options.url ||= config['url']
209
208
 
210
209
  summary = Pooler.summary(verbose, url)
211
- puts summary
210
+ pp summary
212
211
  end
213
212
  end
214
213
 
@@ -3,5 +3,13 @@ class Format
3
3
  # TODO: Takes the json response body from an HTTP GET
4
4
  # request and "pretty prints" it
5
5
  def self.get_hosts(hostname_hash)
6
+ host_hash = {}
7
+
8
+ hostname_hash.delete("ok")
9
+ hostname_hash.each do |type, hosts|
10
+ host_hash[type] = hosts["hostname"]
11
+ end
12
+
13
+ puts host_hash.to_json
6
14
  end
7
15
  end
@@ -33,15 +33,16 @@ class Pooler
33
33
 
34
34
  os_string = os_string.chomp("+")
35
35
 
36
- if os_string.size == 0
37
- STDERR.puts "No request was made, os hash specified no vms #{os_type}"
38
- exit 1
39
- end
40
-
41
36
  response = conn.post "/vm/#{os_string}"
42
37
 
43
38
  res_body = JSON.parse(response.body)
44
- res_body
39
+ if res_body["ok"]
40
+ res_body
41
+ else
42
+ STDERR.puts "There was a problem with your request"
43
+ STDERR.puts res_body
44
+ exit 1
45
+ end
45
46
  end
46
47
 
47
48
  def self.modify(verbose, url, hostname, token, lifetime, tags)
@@ -127,7 +128,7 @@ class Pooler
127
128
  conn = Http.get_conn(verbose, url)
128
129
  conn.headers['X-AUTH-TOKEN'] = token
129
130
 
130
- response = conn.post "/vm/#{hostname}/snapshot/#{snapshot}"
131
+ response = conn.post "/vm/#{hostname}/snapshot/#{snapshot_sha}"
131
132
  res_body = JSON.parse(response.body)
132
133
  res_body
133
134
  end
@@ -1,6 +1,6 @@
1
1
 
2
2
  class Version
3
- @version = '0.2.8'
3
+ @version = '0.2.9'
4
4
 
5
5
  def self.get
6
6
  @version
@@ -2,9 +2,176 @@ require 'spec_helper'
2
2
  require_relative '../../lib/vmfloaty/pooler'
3
3
 
4
4
  describe Pooler do
5
+ before :each do
6
+ @vmpooler_url = "https://vmpooler.example.com"
7
+ end
8
+
5
9
  describe "#list" do
6
- it "fails to be a passing test" do
7
- expect(true).to be false
10
+ before :each do
11
+ @list_response_body = "[\"debian-7-i386\",\"debian-7-x86_64\",\"centos-7-x86_64\"]"
12
+ end
13
+
14
+ it "returns a hash with operating systems from the pooler" do
15
+ stub_request(:get, "#{@vmpooler_url}/vm").
16
+ to_return(:status => 200, :body => @list_response_body, :headers => {})
17
+
18
+ list = Pooler.list(false, @vmpooler_url, nil)
19
+ expect(list).to be_an_instance_of Array
20
+ end
21
+
22
+ it "filters operating systems based on the filter param" do
23
+ stub_request(:get, "#{@vmpooler_url}/vm").
24
+ to_return(:status => 200, :body => @list_response_body, :headers => {})
25
+
26
+ list = Pooler.list(false, @vmpooler_url, "deb")
27
+ expect(list).to be_an_instance_of Array
28
+ expect(list.size).to equal 2
29
+ end
30
+
31
+ it "returns nothing if the filter does not match" do
32
+ stub_request(:get, "#{@vmpooler_url}/vm").
33
+ to_return(:status => 200, :body => @list_response_body, :headers => {})
34
+
35
+ list = Pooler.list(false, @vmpooler_url, "windows")
36
+ expect(list).to be_an_instance_of Array
37
+ expect(list.size).to equal 0
38
+ end
39
+ end
40
+
41
+ describe "#retrieve" do
42
+ before :each do
43
+ @retrieve_response_body_single = "{\"ok\":true,\"debian-7-i386\":{\"hostname\":\"fq6qlpjlsskycq6\"}}"
44
+ @retrieve_response_body_double = "{\"ok\":true,\"debian-7-i386\":{\"hostname\":[\"sc0o4xqtodlul5w\",\"4m4dkhqiufnjmxy\"]},\"centos-7-x86_64\":{\"hostname\":\"zb91y9qbrbf6d3q\"}}"
45
+ end
46
+
47
+ it "retrieves a single vm with a token" 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.1', 'X-Auth-Token'=>'mytokenfile'}).
50
+ to_return(:status => 200, :body => @retrieve_response_body_single, :headers => {})
51
+
52
+ vm_hash = {}
53
+ vm_hash['debian-7-i386'] = 1
54
+ vm_req = Pooler.retrieve(false, vm_hash, 'mytokenfile', @vmpooler_url)
55
+ expect(vm_req).to be_an_instance_of Hash
56
+ expect(vm_req["ok"]).to equal true
57
+ expect(vm_req["debian-7-i386"]["hostname"]).to eq "fq6qlpjlsskycq6"
58
+ end
59
+
60
+ it "retrieves a multiple vms with a token" do
61
+ stub_request(:post, "#{@vmpooler_url}/vm/debian-7-i386+debian-7-i386+centos-7-x86_64").
62
+ 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.1', 'X-Auth-Token'=>'mytokenfile'}).
63
+ to_return(:status => 200, :body => @retrieve_response_body_double, :headers => {})
64
+
65
+ vm_hash = {}
66
+ vm_hash['debian-7-i386'] = 2
67
+ vm_hash['centos-7-x86_64'] = 1
68
+ vm_req = Pooler.retrieve(false, vm_hash, 'mytokenfile', @vmpooler_url)
69
+ expect(vm_req).to be_an_instance_of Hash
70
+ expect(vm_req["ok"]).to equal true
71
+ expect(vm_req["debian-7-i386"]["hostname"]).to be_an_instance_of Array
72
+ expect(vm_req["debian-7-i386"]["hostname"]).to eq ["sc0o4xqtodlul5w", "4m4dkhqiufnjmxy"]
73
+ expect(vm_req["centos-7-x86_64"]["hostname"]).to eq "zb91y9qbrbf6d3q"
74
+ end
75
+ end
76
+
77
+ describe "#modify" do
78
+ before :each do
79
+ @modify_response_body_success = "{\"ok\":true}"
80
+ @modify_response_body_fail = "{\"ok\":false}"
81
+ end
82
+
83
+ it "modifies the TTL of a vm" do
84
+ stub_request(:put, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6").
85
+ with(:body => {"lifetime"=>"12"},
86
+ :headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Faraday v0.9.1', 'X-Auth-Token'=>'mytokenfile'}).
87
+ to_return(:status => 200, :body => @modify_response_body_success, :headers => {})
88
+
89
+ modify_req = Pooler.modify(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile', 12, nil)
90
+ expect(modify_req["ok"]).to be true
91
+ end
92
+ end
93
+
94
+ describe "#delete" do
95
+ before :each do
96
+ @delete_response_body_success = "{\"ok\":true}"
97
+ end
98
+
99
+ it "deletes a specified vm" do
100
+ stub_request(:delete, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6").
101
+ with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.1', 'X-Auth-Token'=>'mytokenfile'}).
102
+ to_return(:status => 200, :body => @delete_response_body_success, :headers => {})
103
+
104
+ #expect(Pooler.delete(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile')).to output(/Scheduling host fq6qlpjlsskycq6 for deletion/).to_stdout
105
+ end
106
+ end
107
+
108
+ describe "#staus" do
109
+ before :each do
110
+ #smaller version
111
+ @status_response_body = "{\"capacity\":{\"current\":716,\"total\":717,\"percent\": 99.9},\"status\":{\"ok\":true,\"message\":\"Battle station fully armed and operational.\"}}"
112
+ end
113
+
114
+ it "prints the status" do
115
+ stub_request(:get, "#{@vmpooler_url}/status").
116
+ with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.1'}).
117
+ to_return(:status => 200, :body => @status_response_body, :headers => {})
118
+
119
+ status = Pooler.status(false, @vmpooler_url)
120
+ expect(status).to be_an_instance_of Hash
121
+ end
122
+ end
123
+
124
+ describe "#summary" do
125
+ before :each do
126
+ @status_response_body = ""
127
+
128
+ it "prints the summary" do
129
+ end
130
+ end
131
+ end
132
+
133
+ describe "#query" do
134
+ before :each do
135
+ @query_response_body = "{\"ok\": true,\"fq6qlpjlsskycq6\":{\"template\":\"debian-7-x86_64\",\"lifetime\": 2,\"running\": 0.08,\"state\":\"running\",\"snapshots\":[\"n4eb4kdtp7rwv4x158366vd9jhac8btq\" ],\"domain\": \"delivery.puppetlabs.net\"}}"
136
+ end
137
+
138
+ it "makes a query about a vm" do
139
+ stub_request(:get, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6").
140
+ with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Faraday v0.9.1'}).
141
+ to_return(:status => 200, :body => @query_response_body, :headers => {})
142
+
143
+ query_req = Pooler.query(false, @vmpooler_url, 'fq6qlpjlsskycq6')
144
+ expect(query_req).to be_an_instance_of Hash
145
+ end
146
+ end
147
+
148
+ describe "#snapshot" do
149
+ before :each do
150
+ @snapshot_response_body = "{\"ok\":true}"
151
+ end
152
+
153
+ it "makes a snapshot for a single vm" do
154
+ stub_request(:post, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6/snapshot").
155
+ 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.1', 'X-Auth-Token'=>'mytokenfile'}).
156
+ to_return(:status => 200, :body => @snapshot_response_body, :headers => {})
157
+
158
+ snapshot_req = Pooler.snapshot(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile')
159
+ expect(snapshot_req["ok"]).to be true
160
+ end
161
+ end
162
+
163
+ describe "#revert" do
164
+ before :each do
165
+ @revert_response_body = "{\"ok\":true}"
166
+ end
167
+
168
+ it "makes a request to revert a vm from a snapshot" do
169
+ stub_request(:post, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6/snapshot/dAfewKNfaweLKNve").
170
+ 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.1', 'X-Auth-Token'=>'mytokenfile'}).
171
+ to_return(:status => 200, :body => @revert_response_body, :headers => {})
172
+
173
+ revert_req = Pooler.revert(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile', 'dAfewKNfaweLKNve')
174
+ expect(revert_req["ok"]).to be true
8
175
  end
9
176
  end
10
177
  end
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.2.8
4
+ version: 0.2.9
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-10-12 00:00:00.000000000 Z
11
+ date: 2015-10-14 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
@@ -68,17 +68,17 @@ require_paths:
68
68
  - lib
69
69
  required_ruby_version: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - '>='
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - '>='
76
+ - - ">="
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
79
  requirements: []
80
80
  rubyforge_project:
81
- rubygems_version: 2.4.8
81
+ rubygems_version: 2.2.2
82
82
  signing_key:
83
83
  specification_version: 4
84
84
  summary: CLI application to interface with vmpooler