vmpooler 0.18.0 → 0.18.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/lib/vmpooler.rb +9 -13
- data/lib/vmpooler/api/dashboard.rb +18 -20
- data/lib/vmpooler/api/helpers.rb +11 -13
- data/lib/vmpooler/api/v1.rb +55 -52
- data/lib/vmpooler/metrics/dummy_statsd.rb +0 -3
- data/lib/vmpooler/metrics/graphite.rb +2 -0
- data/lib/vmpooler/metrics/promstats.rb +2 -0
- data/lib/vmpooler/metrics/statsd.rb +5 -3
- data/lib/vmpooler/pool_manager.rb +48 -55
- data/lib/vmpooler/providers/dummy.rb +20 -38
- data/lib/vmpooler/providers/vsphere.rb +18 -27
- data/lib/vmpooler/version.rb +1 -1
- metadata +40 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3a176887cf8f30a94b12b6eeb6341da12bed5dc6b71d182c0dd4a4c055b78fb
|
4
|
+
data.tar.gz: 03ce6a7c2845a6b010b0948d2ed430692d4316df6175f2acdf16b924d0244db7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f426a1ca432757c929bc7f792297dd6ad3fba50c03f0469ea0856c1c6561f9e5ca59b2139a8c088cba1c5087ec95ada0e525a4ec3cf06555e09c12dc10ea4b1
|
7
|
+
data.tar.gz: 5bca724e57bca246e7cf1c680e631cee143e3f287f9525774714b0b86a099e8ab03b75a7f36c28e6225e5de1d2ad915e62e7d981e2dfe4f767eb595717fb3aee
|
data/lib/vmpooler.rb
CHANGED
@@ -53,17 +53,13 @@ module Vmpooler
|
|
53
53
|
|
54
54
|
# Bail out if someone attempts to start vmpooler with dummy authentication
|
55
55
|
# without enbaling debug mode.
|
56
|
-
if parsed_config.key? :auth
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
raise warning.join(";\s")
|
65
|
-
end
|
66
|
-
end
|
56
|
+
if parsed_config.key?(:auth) && parsed_config[:auth]['provider'] == 'dummy' && !ENV['VMPOOLER_DEBUG']
|
57
|
+
warning = [
|
58
|
+
'Dummy authentication should not be used outside of debug mode',
|
59
|
+
'please set environment variable VMPOOLER_DEBUG to \'true\' if you want to use dummy authentication'
|
60
|
+
]
|
61
|
+
|
62
|
+
raise warning.join(";\s")
|
67
63
|
end
|
68
64
|
|
69
65
|
# Set some configuration defaults
|
@@ -140,14 +136,14 @@ module Vmpooler
|
|
140
136
|
parsed_config[:pool_names] << pool['name']
|
141
137
|
pool['ready_ttl'] ||= parsed_config[:config]['ready_ttl']
|
142
138
|
if pool['alias']
|
143
|
-
if pool['alias'].
|
139
|
+
if pool['alias'].instance_of?(Array)
|
144
140
|
pool['alias'].each do |pool_alias|
|
145
141
|
parsed_config[:alias] ||= {}
|
146
142
|
parsed_config[:alias][pool_alias] = [pool['name']] unless parsed_config[:alias].key? pool_alias
|
147
143
|
parsed_config[:alias][pool_alias] << pool['name'] unless parsed_config[:alias][pool_alias].include? pool['name']
|
148
144
|
parsed_config[:pool_names] << pool_alias
|
149
145
|
end
|
150
|
-
elsif pool['alias'].
|
146
|
+
elsif pool['alias'].instance_of?(String)
|
151
147
|
parsed_config[:alias][pool['alias']] = pool['name']
|
152
148
|
parsed_config[:pool_names] << pool['alias']
|
153
149
|
end
|
@@ -128,34 +128,32 @@ module Vmpooler
|
|
128
128
|
|
129
129
|
pools.each do |pool|
|
130
130
|
running = running_hash[pool['name']]
|
131
|
-
pool['major'] = Regexp.last_match[1] if pool['name'] =~ /^(\w+)
|
131
|
+
pool['major'] = Regexp.last_match[1] if pool['name'] =~ /^(\w+)-/
|
132
132
|
result[pool['major']] ||= {}
|
133
133
|
result[pool['major']]['running'] = result[pool['major']]['running'].to_i + running.to_i
|
134
134
|
end
|
135
135
|
|
136
|
-
if params[:history]
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
result[pool['major']]['history'][i] = result[pool['major']]['history'][i].to_i + pool['last'].to_i
|
153
|
-
end
|
136
|
+
if params[:history] && graph_url
|
137
|
+
begin
|
138
|
+
buffer = URI.parse(graph_link('.running.*&from=-1hour&format=json')).read
|
139
|
+
JSON.parse(buffer).each do |pool|
|
140
|
+
if pool['target'] =~ /.*\.(.*)$/
|
141
|
+
pool['name'] = Regexp.last_match[1]
|
142
|
+
pool['major'] = Regexp.last_match[1] if pool['name'] =~ /^(\w+)-/
|
143
|
+
result[pool['major']]['history'] ||= []
|
144
|
+
|
145
|
+
for i in 0..pool['datapoints'].length
|
146
|
+
if pool['datapoints'][i] && pool['datapoints'][i][0]
|
147
|
+
pool['last'] = pool['datapoints'][i][0]
|
148
|
+
result[pool['major']]['history'][i] ||= 0
|
149
|
+
result[pool['major']]['history'][i] = result[pool['major']]['history'][i].to_i + pool['datapoints'][i][0].to_i
|
150
|
+
else
|
151
|
+
result[pool['major']]['history'][i] = result[pool['major']]['history'][i].to_i + pool['last'].to_i
|
154
152
|
end
|
155
153
|
end
|
156
154
|
end
|
157
|
-
rescue StandardError
|
158
155
|
end
|
156
|
+
rescue StandardError
|
159
157
|
end
|
160
158
|
end
|
161
159
|
JSON.pretty_generate(result)
|
data/lib/vmpooler/api/helpers.rb
CHANGED
@@ -13,12 +13,12 @@ module Vmpooler
|
|
13
13
|
def valid_token?(backend)
|
14
14
|
return false unless has_token?
|
15
15
|
|
16
|
-
backend.exists?(
|
16
|
+
backend.exists?("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}") ? true : false
|
17
17
|
end
|
18
18
|
|
19
19
|
def validate_token(backend)
|
20
20
|
if valid_token?(backend)
|
21
|
-
backend.hset(
|
21
|
+
backend.hset("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}", 'last', Time.now)
|
22
22
|
|
23
23
|
return true
|
24
24
|
end
|
@@ -118,8 +118,8 @@ module Vmpooler
|
|
118
118
|
tags.each_pair do |tag, value|
|
119
119
|
next if value.nil? or value.empty?
|
120
120
|
|
121
|
-
backend.hset(
|
122
|
-
backend.hset(
|
121
|
+
backend.hset("vmpooler__vm__#{hostname}", "tag:#{tag}", value)
|
122
|
+
backend.hset("vmpooler__tag__#{Date.today}", "#{hostname}:#{tag}", value)
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
@@ -147,7 +147,7 @@ module Vmpooler
|
|
147
147
|
|
148
148
|
def hostname_shorten(hostname, domain=nil)
|
149
149
|
if domain && hostname =~ /^[\w-]+\.#{domain}$/
|
150
|
-
hostname = hostname[/[
|
150
|
+
hostname = hostname[/[^.]+/]
|
151
151
|
end
|
152
152
|
|
153
153
|
hostname
|
@@ -253,17 +253,15 @@ module Vmpooler
|
|
253
253
|
|
254
254
|
tags = {}
|
255
255
|
|
256
|
-
backend.hgetall(
|
256
|
+
backend.hgetall("vmpooler__tag__#{date_str}").each do |key, value|
|
257
257
|
hostname = 'unknown'
|
258
258
|
tag = 'unknown'
|
259
259
|
|
260
|
-
if key =~
|
260
|
+
if key =~ /:/
|
261
261
|
hostname, tag = key.split(':', 2)
|
262
262
|
end
|
263
263
|
|
264
|
-
if opts[:only]
|
265
|
-
next unless tag == opts[:only]
|
266
|
-
end
|
264
|
+
next if opts[:only] && tag != opts[:only]
|
267
265
|
|
268
266
|
tags[tag] ||= {}
|
269
267
|
tags[tag][value] ||= 0
|
@@ -321,7 +319,7 @@ module Vmpooler
|
|
321
319
|
}
|
322
320
|
}
|
323
321
|
|
324
|
-
task[:count][:total] = backend.hlen(
|
322
|
+
task[:count][:total] = backend.hlen("vmpooler__#{task_str}__#{date_str}").to_i
|
325
323
|
|
326
324
|
if task[:count][:total] > 0
|
327
325
|
if opts[:bypool] == true
|
@@ -330,11 +328,11 @@ module Vmpooler
|
|
330
328
|
task[:count][:pool] = {}
|
331
329
|
task[:duration][:pool] = {}
|
332
330
|
|
333
|
-
backend.hgetall(
|
331
|
+
backend.hgetall("vmpooler__#{task_str}__#{date_str}").each do |key, value|
|
334
332
|
pool = 'unknown'
|
335
333
|
hostname = 'unknown'
|
336
334
|
|
337
|
-
if key =~
|
335
|
+
if key =~ /:/
|
338
336
|
pool, hostname = key.split(':')
|
339
337
|
else
|
340
338
|
hostname = key
|
data/lib/vmpooler/api/v1.rb
CHANGED
@@ -163,26 +163,31 @@ module Vmpooler
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def return_vm_to_ready_state(template, vm)
|
166
|
+
backend.multi
|
167
|
+
backend.srem("vmpooler__migrating__#{template}", vm)
|
168
|
+
backend.hdel("vmpooler__active__#{template}", vm)
|
169
|
+
backend.hdel("vmpooler__vm__#{vm}", 'checkout', 'token:token', 'token:user')
|
166
170
|
backend.smove("vmpooler__running__#{template}", "vmpooler__ready__#{template}", vm)
|
171
|
+
backend.exec
|
167
172
|
end
|
168
173
|
|
169
174
|
def account_for_starting_vm(template, vm)
|
175
|
+
user = backend.hget("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}", 'user')
|
176
|
+
has_token_result = has_token?
|
177
|
+
backend.multi
|
170
178
|
backend.sadd("vmpooler__migrating__#{template}", vm)
|
171
179
|
backend.hset("vmpooler__active__#{template}", vm, Time.now)
|
172
180
|
backend.hset("vmpooler__vm__#{vm}", 'checkout', Time.now)
|
173
181
|
|
174
|
-
if Vmpooler::API.settings.config[:auth] and
|
175
|
-
|
176
|
-
|
177
|
-
backend.hset('vmpooler__vm__' + vm, 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
|
178
|
-
backend.hset('vmpooler__vm__' + vm, 'token:user',
|
179
|
-
backend.hget('vmpooler__token__' + request.env['HTTP_X_AUTH_TOKEN'], 'user')
|
180
|
-
)
|
182
|
+
if Vmpooler::API.settings.config[:auth] and has_token_result
|
183
|
+
backend.hset("vmpooler__vm__#{vm}", 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
|
184
|
+
backend.hset("vmpooler__vm__#{vm}", 'token:user', user)
|
181
185
|
|
182
186
|
if config['vm_lifetime_auth'].to_i > 0
|
183
|
-
backend.hset(
|
187
|
+
backend.hset("vmpooler__vm__#{vm}", 'lifetime', config['vm_lifetime_auth'].to_i)
|
184
188
|
end
|
185
189
|
end
|
190
|
+
backend.exec
|
186
191
|
end
|
187
192
|
|
188
193
|
def update_result_hosts(result, template, vm)
|
@@ -200,16 +205,19 @@ module Vmpooler
|
|
200
205
|
failed = false
|
201
206
|
vms = []
|
202
207
|
|
208
|
+
validate_token(backend) if Vmpooler::API.settings.config[:auth] and has_token?
|
209
|
+
|
203
210
|
payload.each do |requested, count|
|
204
211
|
count.to_i.times do |_i|
|
205
212
|
vmname, vmpool, vmtemplate = fetch_single_vm(requested)
|
206
|
-
if
|
213
|
+
if vmname
|
214
|
+
account_for_starting_vm(vmpool, vmname)
|
215
|
+
vms << [vmpool, vmname, vmtemplate]
|
216
|
+
metrics.increment("checkout.success.#{vmtemplate}")
|
217
|
+
else
|
207
218
|
failed = true
|
208
|
-
metrics.increment(
|
219
|
+
metrics.increment("checkout.empty.#{requested}")
|
209
220
|
break
|
210
|
-
else
|
211
|
-
vms << [vmpool, vmname, vmtemplate]
|
212
|
-
metrics.increment('checkout.success.' + vmtemplate)
|
213
221
|
end
|
214
222
|
end
|
215
223
|
end
|
@@ -220,8 +228,7 @@ module Vmpooler
|
|
220
228
|
end
|
221
229
|
status 503
|
222
230
|
else
|
223
|
-
vms.each do |(
|
224
|
-
account_for_starting_vm(vmpool, vmname)
|
231
|
+
vms.each do |(_vmpool, vmname, vmtemplate)|
|
225
232
|
update_result_hosts(result, vmtemplate, vmname)
|
226
233
|
end
|
227
234
|
|
@@ -337,7 +344,7 @@ module Vmpooler
|
|
337
344
|
payload&.each do |poolname, count|
|
338
345
|
next unless count.to_i > config['max_ondemand_instances_per_request']
|
339
346
|
|
340
|
-
metrics.increment(
|
347
|
+
metrics.increment("ondemandrequest_fail.toomanyrequests.#{poolname}")
|
341
348
|
return true
|
342
349
|
end
|
343
350
|
false
|
@@ -380,7 +387,7 @@ module Vmpooler
|
|
380
387
|
if Vmpooler::API.settings.config[:auth] and has_token?
|
381
388
|
backend.hset("vmpooler__odrequest__#{request_id}", 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
|
382
389
|
backend.hset("vmpooler__odrequest__#{request_id}", 'token:user',
|
383
|
-
backend.hget(
|
390
|
+
backend.hget("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}", 'user'))
|
384
391
|
end
|
385
392
|
|
386
393
|
result['domain'] = config['domain'] if config['domain']
|
@@ -542,9 +549,9 @@ module Vmpooler
|
|
542
549
|
if subpool.include?(p['name'])
|
543
550
|
true
|
544
551
|
elsif !p['alias'].nil?
|
545
|
-
if p['alias'].
|
552
|
+
if p['alias'].instance_of?(Array)
|
546
553
|
(p['alias'] & subpool).any?
|
547
|
-
elsif p['alias'].
|
554
|
+
elsif p['alias'].instance_of?(String)
|
548
555
|
subpool.include?(p['alias'])
|
549
556
|
end
|
550
557
|
end
|
@@ -727,14 +734,14 @@ module Vmpooler
|
|
727
734
|
result = { 'ok' => false }
|
728
735
|
|
729
736
|
if Vmpooler::API.settings.config[:auth]
|
730
|
-
token = backend.hgetall(
|
737
|
+
token = backend.hgetall("vmpooler__token__#{params[:token]}")
|
731
738
|
|
732
739
|
if not token.nil? and not token.empty?
|
733
740
|
status 200
|
734
741
|
|
735
742
|
pools.each do |pool|
|
736
|
-
backend.smembers(
|
737
|
-
if backend.hget(
|
743
|
+
backend.smembers("vmpooler__running__#{pool['name']}").each do |vm|
|
744
|
+
if backend.hget("vmpooler__vm__#{vm}", 'token:token') == params[:token]
|
738
745
|
token['vms'] ||= {}
|
739
746
|
token['vms']['running'] ||= []
|
740
747
|
token['vms']['running'].push(vm)
|
@@ -760,7 +767,7 @@ module Vmpooler
|
|
760
767
|
|
761
768
|
need_auth!
|
762
769
|
|
763
|
-
if backend.del(
|
770
|
+
if backend.del("vmpooler__token__#{params[:token]}").to_i > 0
|
764
771
|
status 200
|
765
772
|
result['ok'] = true
|
766
773
|
end
|
@@ -783,8 +790,8 @@ module Vmpooler
|
|
783
790
|
o = [('a'..'z'), ('0'..'9')].map(&:to_a).flatten
|
784
791
|
result['token'] = o[rand(25)] + (0...31).map { o[rand(o.length)] }.join
|
785
792
|
|
786
|
-
backend.hset(
|
787
|
-
backend.hset(
|
793
|
+
backend.hset("vmpooler__token__#{result['token']}", 'user', @auth.username)
|
794
|
+
backend.hset("vmpooler__token__#{result['token']}", 'created', Time.now)
|
788
795
|
|
789
796
|
status 200
|
790
797
|
result['ok'] = true
|
@@ -823,7 +830,7 @@ module Vmpooler
|
|
823
830
|
else
|
824
831
|
result[:bad_templates] = invalid
|
825
832
|
invalid.each do |bad_template|
|
826
|
-
metrics.increment(
|
833
|
+
metrics.increment("ondemandrequest_fail.invalid.#{bad_template}")
|
827
834
|
end
|
828
835
|
status 404
|
829
836
|
end
|
@@ -858,7 +865,7 @@ module Vmpooler
|
|
858
865
|
else
|
859
866
|
result[:bad_templates] = invalid
|
860
867
|
invalid.each do |bad_template|
|
861
|
-
metrics.increment(
|
868
|
+
metrics.increment("ondemandrequest_fail.invalid.#{bad_template}")
|
862
869
|
end
|
863
870
|
status 404
|
864
871
|
end
|
@@ -904,7 +911,7 @@ module Vmpooler
|
|
904
911
|
result = atomically_allocate_vms(payload)
|
905
912
|
else
|
906
913
|
invalid.each do |bad_template|
|
907
|
-
metrics.increment(
|
914
|
+
metrics.increment("checkout.invalid.#{bad_template}")
|
908
915
|
end
|
909
916
|
status 404
|
910
917
|
end
|
@@ -980,7 +987,8 @@ module Vmpooler
|
|
980
987
|
result['ok'] = true
|
981
988
|
status 202
|
982
989
|
|
983
|
-
|
990
|
+
case request_hash['status']
|
991
|
+
when 'ready'
|
984
992
|
result['ready'] = true
|
985
993
|
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias, pool, _count|
|
986
994
|
instances = backend.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
@@ -993,10 +1001,10 @@ module Vmpooler
|
|
993
1001
|
end
|
994
1002
|
result['domain'] = config['domain'] if config['domain']
|
995
1003
|
status 200
|
996
|
-
|
1004
|
+
when 'failed'
|
997
1005
|
result['message'] = "The request failed to provision instances within the configured ondemand_request_ttl '#{config['ondemand_request_ttl']}'"
|
998
1006
|
status 200
|
999
|
-
|
1007
|
+
when 'deleted'
|
1000
1008
|
result['message'] = 'The request has been deleted'
|
1001
1009
|
status 200
|
1002
1010
|
else
|
@@ -1059,7 +1067,7 @@ module Vmpooler
|
|
1059
1067
|
result = atomically_allocate_vms(payload)
|
1060
1068
|
else
|
1061
1069
|
invalid.each do |bad_template|
|
1062
|
-
metrics.increment(
|
1070
|
+
metrics.increment("checkout.invalid.#{bad_template}")
|
1063
1071
|
end
|
1064
1072
|
status 404
|
1065
1073
|
end
|
@@ -1082,7 +1090,7 @@ module Vmpooler
|
|
1082
1090
|
|
1083
1091
|
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
1084
1092
|
|
1085
|
-
rdata = backend.hgetall(
|
1093
|
+
rdata = backend.hgetall("vmpooler__vm__#{params[:hostname]}")
|
1086
1094
|
unless rdata.empty?
|
1087
1095
|
status 200
|
1088
1096
|
result['ok'] = true
|
@@ -1093,7 +1101,7 @@ module Vmpooler
|
|
1093
1101
|
result[params[:hostname]]['lifetime'] = (rdata['lifetime'] || config['vm_lifetime']).to_i
|
1094
1102
|
|
1095
1103
|
if rdata['destroy']
|
1096
|
-
result[params[:hostname]]['running'] = ((Time.parse(rdata['destroy']) - Time.parse(rdata['checkout'])) / 60 / 60).round(2)
|
1104
|
+
result[params[:hostname]]['running'] = ((Time.parse(rdata['destroy']) - Time.parse(rdata['checkout'])) / 60 / 60).round(2) if rdata['checkout']
|
1097
1105
|
result[params[:hostname]]['state'] = 'destroyed'
|
1098
1106
|
elsif rdata['checkout']
|
1099
1107
|
result[params[:hostname]]['running'] = ((Time.now - Time.parse(rdata['checkout'])) / 60 / 60).round(2)
|
@@ -1155,12 +1163,12 @@ module Vmpooler
|
|
1155
1163
|
|
1156
1164
|
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
1157
1165
|
|
1158
|
-
rdata = backend.hgetall(
|
1166
|
+
rdata = backend.hgetall("vmpooler__vm__#{params[:hostname]}")
|
1159
1167
|
unless rdata.empty?
|
1160
1168
|
need_token! if rdata['token:token']
|
1161
1169
|
|
1162
|
-
if backend.srem(
|
1163
|
-
backend.sadd(
|
1170
|
+
if backend.srem("vmpooler__running__#{rdata['template']}", params[:hostname])
|
1171
|
+
backend.sadd("vmpooler__completed__#{rdata['template']}", params[:hostname])
|
1164
1172
|
|
1165
1173
|
status 200
|
1166
1174
|
result['ok'] = true
|
@@ -1184,7 +1192,7 @@ module Vmpooler
|
|
1184
1192
|
|
1185
1193
|
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
1186
1194
|
|
1187
|
-
if backend.exists?(
|
1195
|
+
if backend.exists?("vmpooler__vm__#{params[:hostname]}")
|
1188
1196
|
begin
|
1189
1197
|
jdata = JSON.parse(request.body.read)
|
1190
1198
|
rescue StandardError
|
@@ -1212,13 +1220,8 @@ module Vmpooler
|
|
1212
1220
|
end
|
1213
1221
|
|
1214
1222
|
when 'tags'
|
1215
|
-
unless arg.is_a?(Hash)
|
1216
|
-
|
1217
|
-
end
|
1218
|
-
|
1219
|
-
if config['allowed_tags']
|
1220
|
-
failure.push("You provided unsuppored tags (#{arg}).") if not (arg.keys - config['allowed_tags']).empty?
|
1221
|
-
end
|
1223
|
+
failure.push("You provided tags (#{arg}) as something other than a hash.") unless arg.is_a?(Hash)
|
1224
|
+
failure.push("You provided unsuppored tags (#{arg}).") if config['allowed_tags'] && !(arg.keys - config['allowed_tags']).empty?
|
1222
1225
|
else
|
1223
1226
|
failure.push("Unknown argument #{arg}.")
|
1224
1227
|
end
|
@@ -1235,7 +1238,7 @@ module Vmpooler
|
|
1235
1238
|
|
1236
1239
|
arg = arg.to_i
|
1237
1240
|
|
1238
|
-
backend.hset(
|
1241
|
+
backend.hset("vmpooler__vm__#{params[:hostname]}", param, arg)
|
1239
1242
|
when 'tags'
|
1240
1243
|
filter_tags(arg)
|
1241
1244
|
export_tags(backend, params[:hostname], arg)
|
@@ -1261,11 +1264,11 @@ module Vmpooler
|
|
1261
1264
|
|
1262
1265
|
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
1263
1266
|
|
1264
|
-
if ((params[:size].to_i > 0 )and (backend.exists?(
|
1267
|
+
if ((params[:size].to_i > 0 )and (backend.exists?("vmpooler__vm__#{params[:hostname]}")))
|
1265
1268
|
result[params[:hostname]] = {}
|
1266
1269
|
result[params[:hostname]]['disk'] = "+#{params[:size]}gb"
|
1267
1270
|
|
1268
|
-
backend.sadd('vmpooler__tasks__disk', params[:hostname]
|
1271
|
+
backend.sadd('vmpooler__tasks__disk', "#{params[:hostname]}:#{params[:size]}")
|
1269
1272
|
|
1270
1273
|
status 202
|
1271
1274
|
result['ok'] = true
|
@@ -1285,13 +1288,13 @@ module Vmpooler
|
|
1285
1288
|
|
1286
1289
|
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
1287
1290
|
|
1288
|
-
if backend.exists?(
|
1291
|
+
if backend.exists?("vmpooler__vm__#{params[:hostname]}")
|
1289
1292
|
result[params[:hostname]] = {}
|
1290
1293
|
|
1291
1294
|
o = [('a'..'z'), ('0'..'9')].map(&:to_a).flatten
|
1292
1295
|
result[params[:hostname]]['snapshot'] = o[rand(25)] + (0...31).map { o[rand(o.length)] }.join
|
1293
1296
|
|
1294
|
-
backend.sadd('vmpooler__tasks__snapshot', params[:hostname]
|
1297
|
+
backend.sadd('vmpooler__tasks__snapshot', "#{params[:hostname]}:#{result[params[:hostname]]['snapshot']}")
|
1295
1298
|
|
1296
1299
|
status 202
|
1297
1300
|
result['ok'] = true
|
@@ -1311,8 +1314,8 @@ module Vmpooler
|
|
1311
1314
|
|
1312
1315
|
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
1313
1316
|
|
1314
|
-
unless backend.hget(
|
1315
|
-
backend.sadd('vmpooler__tasks__snapshot-revert', params[:hostname]
|
1317
|
+
unless backend.hget("vmpooler__vm__#{params[:hostname]}", "snapshot:#{params[:snapshot]}").to_i.zero?
|
1318
|
+
backend.sadd('vmpooler__tasks__snapshot-revert', "#{params[:hostname]}:#{params[:snapshot]}")
|
1316
1319
|
|
1317
1320
|
status 202
|
1318
1321
|
result['ok'] = true
|