vmpooler 0.9.1 → 0.10.2
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 +49 -0
- data/lib/vmpooler/pool_manager.rb +23 -1
- data/lib/vmpooler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f8a23a9dbbb4ee9369c39b366e53966c0c4d29eb959c8b21f3bdfd4620f3255
|
4
|
+
data.tar.gz: 9f13c353a75106ba0613fada05bc6fa1d8015d363389a906234394b6ecb27eea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a2268acc778c67da116626ea346767b1eeec7034f145c283c931640f52904267449dcff7e03c2865fb59abc3becabc48ab47416e04a08c959b216d72f7e544c
|
7
|
+
data.tar.gz: 99ae57d9df5b2185927be56b1c28752df50a0b6e28ba5d6d3725c7b310f84299eaf11ee11fe691ce89209947c2142887aaced83537f2cd5ad63442886d433349
|
data/lib/vmpooler/api/v1.rb
CHANGED
@@ -200,6 +200,17 @@ module Vmpooler
|
|
200
200
|
result
|
201
201
|
end
|
202
202
|
|
203
|
+
def reset_pool(payload)
|
204
|
+
result = { 'ok' => false }
|
205
|
+
|
206
|
+
payload.each do |poolname, count|
|
207
|
+
backend.sadd('vmpooler__poolreset', poolname)
|
208
|
+
end
|
209
|
+
status 201
|
210
|
+
result['ok'] = true
|
211
|
+
result
|
212
|
+
end
|
213
|
+
|
203
214
|
def update_clone_target(payload)
|
204
215
|
result = { 'ok' => false }
|
205
216
|
|
@@ -1081,6 +1092,44 @@ module Vmpooler
|
|
1081
1092
|
JSON.pretty_generate(result)
|
1082
1093
|
end
|
1083
1094
|
|
1095
|
+
post "#{api_prefix}/poolreset/?" do
|
1096
|
+
content_type :json
|
1097
|
+
result = { 'ok' => false }
|
1098
|
+
|
1099
|
+
if config['experimental_features']
|
1100
|
+
need_token! if Vmpooler::API.settings.config[:auth]
|
1101
|
+
|
1102
|
+
begin
|
1103
|
+
payload = JSON.parse(request.body.read)
|
1104
|
+
if payload
|
1105
|
+
invalid = invalid_templates(payload)
|
1106
|
+
if invalid.empty?
|
1107
|
+
result = reset_pool(payload)
|
1108
|
+
else
|
1109
|
+
invalid.each do |bad_pool|
|
1110
|
+
metrics.increment("poolreset.invalid.#{bad_pool}")
|
1111
|
+
end
|
1112
|
+
result[:bad_pools] = invalid
|
1113
|
+
status 400
|
1114
|
+
end
|
1115
|
+
else
|
1116
|
+
metrics.increment('poolreset.invalid.unknown')
|
1117
|
+
status 404
|
1118
|
+
end
|
1119
|
+
rescue JSON::ParserError
|
1120
|
+
status 400
|
1121
|
+
result = {
|
1122
|
+
'ok' => false,
|
1123
|
+
'message' => 'JSON payload could not be parsed'
|
1124
|
+
}
|
1125
|
+
end
|
1126
|
+
else
|
1127
|
+
status 405
|
1128
|
+
end
|
1129
|
+
|
1130
|
+
JSON.pretty_generate(result)
|
1131
|
+
end
|
1132
|
+
|
1084
1133
|
post "#{api_prefix}/config/clonetarget/?" do
|
1085
1134
|
content_type :json
|
1086
1135
|
result = { 'ok' => false }
|
@@ -714,6 +714,10 @@ module Vmpooler
|
|
714
714
|
# - Fires when a template configuration update is requested
|
715
715
|
# - Additional options
|
716
716
|
# :poolname
|
717
|
+
# :pool_reset
|
718
|
+
# - Fires when a pool reset is requested
|
719
|
+
# - Additional options
|
720
|
+
# :poolname
|
717
721
|
#
|
718
722
|
def sleep_with_wakeup_events(loop_delay, wakeup_period = 5, options = {})
|
719
723
|
exit_by = Time.now + loop_delay
|
@@ -760,6 +764,10 @@ module Vmpooler
|
|
760
764
|
end
|
761
765
|
end
|
762
766
|
|
767
|
+
if options[:pool_reset]
|
768
|
+
break if $redis.sismember('vmpooler__poolreset', options[:poolname])
|
769
|
+
end
|
770
|
+
|
763
771
|
end
|
764
772
|
|
765
773
|
break if time_passed?(:exit_by, exit_by)
|
@@ -797,7 +805,7 @@ module Vmpooler
|
|
797
805
|
loop_delay = (loop_delay * loop_delay_decay).to_i
|
798
806
|
loop_delay = loop_delay_max if loop_delay > loop_delay_max
|
799
807
|
end
|
800
|
-
sleep_with_wakeup_events(loop_delay, loop_delay_min, pool_size_change: true, poolname: pool['name'], pool_template_change: true, clone_target_change: true)
|
808
|
+
sleep_with_wakeup_events(loop_delay, loop_delay_min, pool_size_change: true, poolname: pool['name'], pool_template_change: true, clone_target_change: true, pool_reset: true)
|
801
809
|
|
802
810
|
unless maxloop.zero?
|
803
811
|
break if loop_count >= maxloop
|
@@ -951,6 +959,17 @@ module Vmpooler
|
|
951
959
|
end
|
952
960
|
end
|
953
961
|
|
962
|
+
def reset_pool(pool)
|
963
|
+
poolname = pool['name']
|
964
|
+
return unless $redis.sismember('vmpooler__poolreset', poolname)
|
965
|
+
$redis.srem('vmpooler__poolreset', poolname)
|
966
|
+
mutex = pool_mutex(poolname)
|
967
|
+
mutex.synchronize do
|
968
|
+
drain_pool(poolname)
|
969
|
+
$logger.log('s', "[*] [#{poolname}] reset has cleared ready and pending instances")
|
970
|
+
end
|
971
|
+
end
|
972
|
+
|
954
973
|
def create_inventory(pool, provider, pool_check_response)
|
955
974
|
inventory = {}
|
956
975
|
begin
|
@@ -1159,6 +1178,9 @@ module Vmpooler
|
|
1159
1178
|
# Remove VMs in excess of the configured pool size
|
1160
1179
|
remove_excess_vms(pool)
|
1161
1180
|
|
1181
|
+
# Reset a pool when poolreset is requested from the API
|
1182
|
+
reset_pool(pool)
|
1183
|
+
|
1162
1184
|
pool_check_response
|
1163
1185
|
end
|
1164
1186
|
|
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.
|
4
|
+
version: 0.10.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pickup
|