vmpooler 0.13.2 → 0.13.3
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/api/v1.rb +15 -15
- data/lib/vmpooler/pool_manager.rb +3 -6
- data/lib/vmpooler/util/parsing.rb +16 -0
- data/lib/vmpooler/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe0ef9bcf3e665cc952fce0975a4381883fca200ef93a883e54c7db7e1fc10e7
|
4
|
+
data.tar.gz: d44b61c41a57f940cf0df4bf07aabed10b1a72e91cae5b2105f092a7d98d6d05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0e7bbec11ceecc5fdee0fe15b3d37e290a6c884a708a6a5acb2e790d54fb1f1e24ec6966973f02bbecd204a29497e9c17ae3b8be26a0d3f15cec508a0d64532
|
7
|
+
data.tar.gz: 7302cf41676a65ff5d0bb4108a8f5ac03a96a92e3cd0ec56deee2f2a60d6e73f09eee569ef0f4140e3c27e81a16c3e2d24b951764a772bdeaa082a96d8bde1fe
|
data/lib/vmpooler/api/v1.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'vmpooler/util/parsing'
|
4
|
+
|
3
5
|
module Vmpooler
|
4
6
|
class API
|
5
7
|
class V1 < Sinatra::Base
|
@@ -334,9 +336,10 @@ module Vmpooler
|
|
334
336
|
end
|
335
337
|
|
336
338
|
def too_many_requested?(payload)
|
337
|
-
payload&.each do |
|
339
|
+
payload&.each do |poolname, count|
|
338
340
|
next unless count.to_i > config['max_ondemand_instances_per_request']
|
339
341
|
|
342
|
+
metrics.increment('ondemandrequest.toomanyrequests.' + poolname)
|
340
343
|
return true
|
341
344
|
end
|
342
345
|
false
|
@@ -360,6 +363,7 @@ module Vmpooler
|
|
360
363
|
if backend.exists("vmpooler__odrequest__#{request_id}")
|
361
364
|
result['message'] = "request_id '#{request_id}' has already been created"
|
362
365
|
status 409
|
366
|
+
metrics.increment('ondemandrequest.generate.duplicaterequests')
|
363
367
|
return result
|
364
368
|
end
|
365
369
|
|
@@ -383,6 +387,7 @@ module Vmpooler
|
|
383
387
|
|
384
388
|
result['domain'] = config['domain'] if config['domain']
|
385
389
|
result[:ok] = true
|
390
|
+
metrics.increment('ondemandrequest.generate.success')
|
386
391
|
result
|
387
392
|
end
|
388
393
|
|
@@ -974,11 +979,9 @@ module Vmpooler
|
|
974
979
|
|
975
980
|
if request_hash['status'] == 'ready'
|
976
981
|
result['ready'] = true
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
instances = backend.smembers("vmpooler__#{request_id}__#{pool_alias}__#{pool}")
|
981
|
-
result[pool_alias] = { 'hostname': instances }
|
982
|
+
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias, pool, _count|
|
983
|
+
instances = backend.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
984
|
+
result[platform_alias] = { 'hostname': instances }
|
982
985
|
end
|
983
986
|
result['domain'] = config['domain'] if config['domain']
|
984
987
|
status 200
|
@@ -989,11 +992,9 @@ module Vmpooler
|
|
989
992
|
result['message'] = 'The request has been deleted'
|
990
993
|
status 200
|
991
994
|
else
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
instance_count = backend.scard("vmpooler__#{request_id}__#{pool_alias}__#{pool}")
|
996
|
-
result[pool_alias] = {
|
995
|
+
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias, pool, count|
|
996
|
+
instance_count = backend.scard("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
997
|
+
result[platform_alias] = {
|
997
998
|
'ready': instance_count.to_s,
|
998
999
|
'pending': (count.to_i - instance_count.to_i).to_s
|
999
1000
|
}
|
@@ -1017,12 +1018,11 @@ module Vmpooler
|
|
1017
1018
|
else
|
1018
1019
|
backend.hset("vmpooler__odrequest__#{request_id}", 'status', 'deleted')
|
1019
1020
|
|
1020
|
-
|
1021
|
-
|
1022
|
-
backend.smembers("vmpooler__#{request_id}__#{pool_alias}__#{pool}")&.each do |vm|
|
1021
|
+
Parsing.get_platform_pool_count(platforms) do |platform_alias, pool, _count|
|
1022
|
+
backend.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")&.each do |vm|
|
1023
1023
|
backend.smove("vmpooler__running__#{pool}", "vmpooler__completed__#{pool}", vm)
|
1024
1024
|
end
|
1025
|
-
backend.del("vmpooler__#{request_id}__#{
|
1025
|
+
backend.del("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
1026
1026
|
end
|
1027
1027
|
backend.expire("vmpooler__odrequest__#{request_id}", 129_600_0)
|
1028
1028
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'vmpooler/providers'
|
4
|
+
require 'vmpooler/util/parsing'
|
4
5
|
require 'spicy-proton'
|
5
6
|
require 'resolv' # ruby standard lib
|
6
7
|
|
@@ -1500,9 +1501,7 @@ module Vmpooler
|
|
1500
1501
|
def vms_ready?(request_id, redis)
|
1501
1502
|
catch :request_not_ready do
|
1502
1503
|
request_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
|
1503
|
-
|
1504
|
-
requested_platforms.each do |platform|
|
1505
|
-
platform_alias, pool, count = platform.split(':')
|
1504
|
+
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias, pool, count|
|
1506
1505
|
pools_filled = redis.scard("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
1507
1506
|
throw :request_not_ready unless pools_filled.to_i == count.to_i
|
1508
1507
|
end
|
@@ -1554,9 +1553,7 @@ module Vmpooler
|
|
1554
1553
|
|
1555
1554
|
def remove_vms_for_failed_request(request_id, expiration_ttl, redis)
|
1556
1555
|
request_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
|
1557
|
-
|
1558
|
-
requested_platforms.each do |platform|
|
1559
|
-
platform_alias, pool, _count = platform.split(':')
|
1556
|
+
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias, pool, _count|
|
1560
1557
|
pools_filled = redis.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
1561
1558
|
redis.pipelined do
|
1562
1559
|
pools_filled&.each do |vm|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# utility class shared between apps
|
4
|
+
module Vmpooler
|
5
|
+
class Parsing
|
6
|
+
def self.get_platform_pool_count(requested, &_block)
|
7
|
+
requested_platforms = requested.split(',')
|
8
|
+
requested_platforms.each do |platform|
|
9
|
+
platform_alias, pool, count = platform.split(':')
|
10
|
+
raise ArgumentError if platform_alias.nil? || pool.nil? || count.nil?
|
11
|
+
|
12
|
+
yield platform_alias, pool, count
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/vmpooler/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmpooler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pickup
|
@@ -229,6 +229,7 @@ files:
|
|
229
229
|
- lib/vmpooler/public/lib/jquery.min.js
|
230
230
|
- lib/vmpooler/public/vmpooler.css
|
231
231
|
- lib/vmpooler/statsd.rb
|
232
|
+
- lib/vmpooler/util/parsing.rb
|
232
233
|
- lib/vmpooler/version.rb
|
233
234
|
- lib/vmpooler/views/dashboard.erb
|
234
235
|
- lib/vmpooler/views/layout.erb
|
@@ -251,7 +252,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
252
|
- !ruby/object:Gem::Version
|
252
253
|
version: '0'
|
253
254
|
requirements: []
|
254
|
-
rubygems_version: 3.0.
|
255
|
+
rubygems_version: 3.0.8
|
255
256
|
signing_key:
|
256
257
|
specification_version: 4
|
257
258
|
summary: vmpooler provides configurable pools of instantly-available (running) virtual
|