vmpooler 3.1.0 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vmpooler/api/helpers.rb +1 -1
- data/lib/vmpooler/api/v3.rb +3 -3
- data/lib/vmpooler/pool_manager.rb +38 -43
- data/lib/vmpooler/version.rb +1 -1
- data/lib/vmpooler.rb +15 -3
- metadata +25 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b586b8ee56526b89f47621d090f932159c46df74c6935002e8a71c18a02503fb
|
4
|
+
data.tar.gz: 51e4f7cf4dd4a5daa3130ab1bb60b08b4347196e1ba1c39f94a820d7356f2937
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39ba39f114252e74a08a6c3dbebd773cb2dda74adfc33216b7774dbf8fb83109f2a61076a3435cab54f8dc39adcdef60ee1cac44f24b3f3f441c7ceaf389e813
|
7
|
+
data.tar.gz: e295be65e92e61fad459d32d1a6171396b0599795355b99821d7bc8272ecbe19cfee78dd735c88e49653d5156afb7e529f12935d484fc2b1c479e5eed4be69e1
|
data/lib/vmpooler/api/helpers.rb
CHANGED
@@ -25,7 +25,7 @@ module Vmpooler
|
|
25
25
|
def validate_token(backend)
|
26
26
|
tracer.in_span("Vmpooler::API::Helpers.#{__method__}") do
|
27
27
|
if valid_token?(backend)
|
28
|
-
backend.hset("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}", 'last', Time.now)
|
28
|
+
backend.hset("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}", 'last', Time.now.to_s)
|
29
29
|
|
30
30
|
return true
|
31
31
|
end
|
data/lib/vmpooler/api/v3.rb
CHANGED
@@ -189,8 +189,8 @@ module Vmpooler
|
|
189
189
|
span.set_attribute('enduser.id', user)
|
190
190
|
has_token_result = has_token?
|
191
191
|
backend.sadd("vmpooler__migrating__#{template}", vm)
|
192
|
-
backend.hset("vmpooler__active__#{template}", vm, Time.now)
|
193
|
-
backend.hset("vmpooler__vm__#{vm}", 'checkout', Time.now)
|
192
|
+
backend.hset("vmpooler__active__#{template}", vm, Time.now.to_s)
|
193
|
+
backend.hset("vmpooler__vm__#{vm}", 'checkout', Time.now.to_s)
|
194
194
|
|
195
195
|
if Vmpooler::API.settings.config[:auth] and has_token_result
|
196
196
|
backend.hset("vmpooler__vm__#{vm}", 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
|
@@ -971,7 +971,7 @@ module Vmpooler
|
|
971
971
|
result['token'] = o[rand(25)] + (0...31).map { o[rand(o.length)] }.join
|
972
972
|
|
973
973
|
backend.hset("vmpooler__token__#{result['token']}", 'user', @auth.username)
|
974
|
-
backend.hset("vmpooler__token__#{result['token']}", 'created', Time.now)
|
974
|
+
backend.hset("vmpooler__token__#{result['token']}", 'created', Time.now.to_s)
|
975
975
|
span = OpenTelemetry::Trace.current_span
|
976
976
|
span.set_attribute('enduser.id', @auth.username)
|
977
977
|
|
@@ -59,7 +59,7 @@ module Vmpooler
|
|
59
59
|
currently_configured_pools = []
|
60
60
|
config[:pools].each do |pool|
|
61
61
|
currently_configured_pools << pool['name']
|
62
|
-
redis.sadd('vmpooler__pools', pool['name'])
|
62
|
+
redis.sadd('vmpooler__pools', pool['name'].to_s)
|
63
63
|
pool_keys = pool.keys
|
64
64
|
pool_keys.delete('alias')
|
65
65
|
to_set = {}
|
@@ -68,11 +68,12 @@ module Vmpooler
|
|
68
68
|
end
|
69
69
|
to_set['alias'] = pool['alias'].join(',') if to_set.key?('alias')
|
70
70
|
to_set['domain'] = Vmpooler::Dns.get_domain_for_pool(config, pool['name'])
|
71
|
-
|
71
|
+
|
72
|
+
redis.hmset("vmpooler__pool__#{pool['name']}", *to_set.to_a.flatten) unless to_set.empty?
|
72
73
|
end
|
73
74
|
previously_configured_pools.each do |pool|
|
74
75
|
unless currently_configured_pools.include? pool
|
75
|
-
redis.srem('vmpooler__pools', pool)
|
76
|
+
redis.srem('vmpooler__pools', pool.to_s)
|
76
77
|
redis.del("vmpooler__pool__#{pool}")
|
77
78
|
end
|
78
79
|
end
|
@@ -129,7 +130,6 @@ module Vmpooler
|
|
129
130
|
if exists
|
130
131
|
request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id')
|
131
132
|
pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias') if request_id
|
132
|
-
redis.multi
|
133
133
|
redis.smove("vmpooler__pending__#{pool}", "vmpooler__completed__#{pool}", vm)
|
134
134
|
if request_id
|
135
135
|
ondemandrequest_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
|
@@ -138,7 +138,6 @@ module Vmpooler
|
|
138
138
|
redis.zadd('vmpooler__odcreate__task', 1, "#{pool_alias}:#{pool}:1:#{request_id}")
|
139
139
|
end
|
140
140
|
end
|
141
|
-
redis.exec
|
142
141
|
$metrics.increment("errors.markedasfailed.#{pool}")
|
143
142
|
$logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes")
|
144
143
|
else
|
@@ -168,8 +167,8 @@ module Vmpooler
|
|
168
167
|
pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias')
|
169
168
|
|
170
169
|
redis.pipelined do |pipeline|
|
171
|
-
pipeline.hset("vmpooler__active__#{pool}", vm, Time.now)
|
172
|
-
pipeline.hset("vmpooler__vm__#{vm}", 'checkout', Time.now)
|
170
|
+
pipeline.hset("vmpooler__active__#{pool}", vm, Time.now.to_s)
|
171
|
+
pipeline.hset("vmpooler__vm__#{vm}", 'checkout', Time.now.to_s)
|
173
172
|
if ondemandrequest_hash['token:token']
|
174
173
|
pipeline.hset("vmpooler__vm__#{vm}", 'token:token', ondemandrequest_hash['token:token'])
|
175
174
|
pipeline.hset("vmpooler__vm__#{vm}", 'token:user', ondemandrequest_hash['token:user'])
|
@@ -185,10 +184,10 @@ module Vmpooler
|
|
185
184
|
|
186
185
|
redis.pipelined do |pipeline|
|
187
186
|
pipeline.hset("vmpooler__boot__#{Date.today}", "#{pool}:#{vm}", finish) # maybe remove as this is never used by vmpooler itself?
|
188
|
-
pipeline.hset("vmpooler__vm__#{vm}", 'ready', Time.now)
|
187
|
+
pipeline.hset("vmpooler__vm__#{vm}", 'ready', Time.now.to_s)
|
189
188
|
|
190
189
|
# last boot time is displayed in API, and used by alarming script
|
191
|
-
pipeline.hset('vmpooler__lastboot', pool, Time.now)
|
190
|
+
pipeline.hset('vmpooler__lastboot', pool, Time.now.to_s)
|
192
191
|
end
|
193
192
|
|
194
193
|
$metrics.timing("time_to_ready_state.#{pool}", finish)
|
@@ -227,7 +226,7 @@ module Vmpooler
|
|
227
226
|
last_checked_too_soon = ((Time.now - Time.parse(check_stamp)).to_i < $config[:config]['vm_checktime'] * 60) if check_stamp
|
228
227
|
break if check_stamp && last_checked_too_soon
|
229
228
|
|
230
|
-
redis.hset("vmpooler__vm__#{vm}", 'check', Time.now)
|
229
|
+
redis.hset("vmpooler__vm__#{vm}", 'check', Time.now.to_s)
|
231
230
|
# Check if the hosts TTL has expired
|
232
231
|
# if 'boottime' is nil, set bootime to beginning of unix epoch, forces TTL to be assumed expired
|
233
232
|
boottime = redis.hget("vmpooler__vm__#{vm}", 'ready')
|
@@ -428,16 +427,15 @@ module Vmpooler
|
|
428
427
|
mutex = vm_mutex(new_vmname)
|
429
428
|
mutex.synchronize do
|
430
429
|
@redis.with_metrics do |redis|
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
redis.exec
|
430
|
+
redis.multi do |transaction|
|
431
|
+
transaction.sadd("vmpooler__pending__#{pool_name}", new_vmname)
|
432
|
+
transaction.hset("vmpooler__vm__#{new_vmname}", 'clone', Time.now.to_s)
|
433
|
+
transaction.hset("vmpooler__vm__#{new_vmname}", 'template', pool_name) # This value is used to represent the pool.
|
434
|
+
transaction.hset("vmpooler__vm__#{new_vmname}", 'pool', pool_name)
|
435
|
+
transaction.hset("vmpooler__vm__#{new_vmname}", 'domain', pool_domain)
|
436
|
+
transaction.hset("vmpooler__vm__#{new_vmname}", 'request_id', request_id) if request_id
|
437
|
+
transaction.hset("vmpooler__vm__#{new_vmname}", 'pool_alias', pool_alias) if pool_alias
|
438
|
+
end
|
441
439
|
end
|
442
440
|
|
443
441
|
begin
|
@@ -502,7 +500,7 @@ module Vmpooler
|
|
502
500
|
@redis.with_metrics do |redis|
|
503
501
|
redis.pipelined do |pipeline|
|
504
502
|
pipeline.hdel("vmpooler__active__#{pool}", vm)
|
505
|
-
pipeline.hset("vmpooler__vm__#{vm}", 'destroy', Time.now)
|
503
|
+
pipeline.hset("vmpooler__vm__#{vm}", 'destroy', Time.now.to_s)
|
506
504
|
|
507
505
|
# Auto-expire metadata key
|
508
506
|
pipeline.expire("vmpooler__vm__#{vm}", ($config[:redis]['data_ttl'].to_i * 60 * 60))
|
@@ -868,12 +866,13 @@ module Vmpooler
|
|
868
866
|
def sleep_with_wakeup_events(loop_delay, wakeup_period = 5, options = {})
|
869
867
|
exit_by = Time.now + loop_delay
|
870
868
|
wakeup_by = Time.now + wakeup_period
|
869
|
+
|
871
870
|
return if time_passed?(:exit_by, exit_by)
|
872
871
|
|
873
872
|
@redis.with_metrics do |redis|
|
874
873
|
initial_ready_size = redis.scard("vmpooler__ready__#{options[:poolname]}") if options[:pool_size_change]
|
875
874
|
|
876
|
-
initial_clone_target = redis.hget("vmpooler__pool__#{options[:poolname]}", options[:clone_target]) if options[:clone_target_change]
|
875
|
+
initial_clone_target = redis.hget("vmpooler__pool__#{options[:poolname]}", options[:clone_target].to_s) if options[:clone_target_change]
|
877
876
|
|
878
877
|
initial_template = redis.hget('vmpooler__template__prepared', options[:poolname]) if options[:pool_template_change]
|
879
878
|
|
@@ -917,11 +916,10 @@ module Vmpooler
|
|
917
916
|
end
|
918
917
|
|
919
918
|
if options[:ondemand_request]
|
920
|
-
redis.
|
921
|
-
redis.zcard('
|
922
|
-
redis.zcard('
|
923
|
-
|
924
|
-
od_request, od_processing, od_createtask = redis.exec
|
919
|
+
od_request = redis.zcard('vmpooler__provisioning__request')
|
920
|
+
od_processing = redis.zcard('vmpooler__provisioning__processing')
|
921
|
+
od_createtask = redis.zcard('vmpooler__odcreate__task')
|
922
|
+
|
925
923
|
break unless od_request == 0
|
926
924
|
break unless od_processing == 0
|
927
925
|
break unless od_createtask == 0
|
@@ -1093,10 +1091,8 @@ module Vmpooler
|
|
1093
1091
|
|
1094
1092
|
def remove_excess_vms(pool)
|
1095
1093
|
@redis.with_metrics do |redis|
|
1096
|
-
redis.
|
1097
|
-
redis.scard("
|
1098
|
-
redis.scard("vmpooler__pending__#{pool['name']}")
|
1099
|
-
ready, pending = redis.exec
|
1094
|
+
ready = redis.scard("vmpooler__ready__#{pool['name']}")
|
1095
|
+
pending = redis.scard("vmpooler__pending__#{pool['name']}")
|
1100
1096
|
total = pending.to_i + ready.to_i
|
1101
1097
|
break if total.nil?
|
1102
1098
|
break if total == 0
|
@@ -1334,11 +1330,10 @@ module Vmpooler
|
|
1334
1330
|
return if pool_mutex(pool_name).locked?
|
1335
1331
|
|
1336
1332
|
@redis.with_metrics do |redis|
|
1337
|
-
redis.
|
1338
|
-
redis.scard("
|
1339
|
-
redis.scard("
|
1340
|
-
|
1341
|
-
ready, pending, running = redis.exec
|
1333
|
+
ready = redis.scard("vmpooler__ready__#{pool_name}")
|
1334
|
+
pending = redis.scard("vmpooler__pending__#{pool_name}")
|
1335
|
+
running = redis.scard("vmpooler__running__#{pool_name}")
|
1336
|
+
|
1342
1337
|
total = pending.to_i + ready.to_i
|
1343
1338
|
|
1344
1339
|
$metrics.gauge("ready.#{pool_name}", ready)
|
@@ -1447,13 +1442,15 @@ module Vmpooler
|
|
1447
1442
|
end
|
1448
1443
|
|
1449
1444
|
def create_dns_object(config, logger, metrics, redis_connection_pool, dns_class, dns_name, options)
|
1450
|
-
|
1451
|
-
|
1452
|
-
|
1445
|
+
if defined?(Vmpooler::PoolManager::Dns)
|
1446
|
+
dns_klass = Vmpooler::PoolManager::Dns
|
1447
|
+
dns_klass.constants.each do |classname|
|
1448
|
+
next unless classname.to_s.casecmp(dns_class) == 0
|
1453
1449
|
|
1454
|
-
|
1450
|
+
return dns_klass.const_get(classname).new(config, logger, metrics, redis_connection_pool, dns_name, options)
|
1451
|
+
end
|
1452
|
+
raise("DNS '#{dns_class}' is unknown for pool with dns name '#{dns_name}'") if dns_klass.nil?
|
1455
1453
|
end
|
1456
|
-
raise("DNS '#{dns_class}' is unknown for pool with dns name '#{dns_name}'") if dns_klass.nil?
|
1457
1454
|
end
|
1458
1455
|
|
1459
1456
|
def check_ondemand_requests(maxloop = 0,
|
@@ -1594,11 +1591,9 @@ module Vmpooler
|
|
1594
1591
|
|
1595
1592
|
return unless vms_ready?(request_id, redis)
|
1596
1593
|
|
1597
|
-
redis.multi
|
1598
1594
|
redis.hset(ondemand_hash_key, 'status', 'ready')
|
1599
1595
|
redis.expire(ondemand_hash_key, default_expiration)
|
1600
1596
|
redis.zrem(processing_key, request_id)
|
1601
|
-
redis.exec
|
1602
1597
|
end
|
1603
1598
|
|
1604
1599
|
def request_expired?(request_id, score, redis)
|
data/lib/vmpooler/version.rb
CHANGED
data/lib/vmpooler.rb
CHANGED
@@ -103,7 +103,7 @@ module Vmpooler
|
|
103
103
|
parsed_config[:redis]['data_ttl'] = string_to_int(ENV['REDIS_DATA_TTL']) || parsed_config[:redis]['data_ttl'] || 168
|
104
104
|
parsed_config[:redis]['connection_pool_size'] = string_to_int(ENV['REDIS_CONNECTION_POOL_SIZE']) || parsed_config[:redis]['connection_pool_size'] || 10
|
105
105
|
parsed_config[:redis]['connection_pool_timeout'] = string_to_int(ENV['REDIS_CONNECTION_POOL_TIMEOUT']) || parsed_config[:redis]['connection_pool_timeout'] || 5
|
106
|
-
parsed_config[:redis]['reconnect_attempts'] =
|
106
|
+
parsed_config[:redis]['reconnect_attempts'] = string_array_to_array(ENV['REDIS_RECONNECT_ATTEMPTS']) || parsed_config[:redis]['reconnect_attempts'] || 10
|
107
107
|
|
108
108
|
parsed_config[:statsd] = parsed_config[:statsd] || {} if ENV['STATSD_SERVER']
|
109
109
|
parsed_config[:statsd]['server'] = ENV['STATSD_SERVER'] if ENV['STATSD_SERVER']
|
@@ -209,8 +209,13 @@ module Vmpooler
|
|
209
209
|
end
|
210
210
|
|
211
211
|
def self.new_redis(host = 'localhost', port = nil, password = nil, redis_reconnect_attempts = 10)
|
212
|
-
Redis.new(
|
213
|
-
|
212
|
+
Redis.new(
|
213
|
+
host: host,
|
214
|
+
port: port,
|
215
|
+
password: password,
|
216
|
+
reconnect_attempts: redis_reconnect_attempts,
|
217
|
+
connect_timeout: 300
|
218
|
+
)
|
214
219
|
end
|
215
220
|
|
216
221
|
def self.pools(conf)
|
@@ -235,6 +240,13 @@ module Vmpooler
|
|
235
240
|
Integer(s)
|
236
241
|
end
|
237
242
|
|
243
|
+
def self.string_array_to_array(s)
|
244
|
+
# Returns an array from an array like string
|
245
|
+
return if s.nil?
|
246
|
+
|
247
|
+
JSON.parse(s)
|
248
|
+
end
|
249
|
+
|
238
250
|
def self.true?(obj)
|
239
251
|
obj.to_s.downcase == 'true'
|
240
252
|
end
|
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: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '2.
|
32
|
+
version: '2.4'
|
33
33
|
name: connection_pool
|
34
34
|
prerelease: false
|
35
35
|
type: :runtime
|
@@ -37,7 +37,7 @@ dependencies:
|
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '2.
|
40
|
+
version: '2.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
@@ -71,7 +71,7 @@ dependencies:
|
|
71
71
|
requirements:
|
72
72
|
- - '='
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.
|
74
|
+
version: 0.23.0
|
75
75
|
name: opentelemetry-exporter-jaeger
|
76
76
|
prerelease: false
|
77
77
|
type: :runtime
|
@@ -79,13 +79,13 @@ dependencies:
|
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
82
|
+
version: 0.23.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - '='
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: 0.
|
88
|
+
version: 0.21.1
|
89
89
|
name: opentelemetry-instrumentation-concurrent_ruby
|
90
90
|
prerelease: false
|
91
91
|
type: :runtime
|
@@ -93,13 +93,13 @@ dependencies:
|
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
96
|
+
version: 0.21.1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - '='
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: 0.
|
102
|
+
version: 0.22.2
|
103
103
|
name: opentelemetry-instrumentation-http_client
|
104
104
|
prerelease: false
|
105
105
|
type: :runtime
|
@@ -107,13 +107,13 @@ dependencies:
|
|
107
107
|
requirements:
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: 0.22.2
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - '='
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: 0.
|
116
|
+
version: 0.25.3
|
117
117
|
name: opentelemetry-instrumentation-redis
|
118
118
|
prerelease: false
|
119
119
|
type: :runtime
|
@@ -121,13 +121,13 @@ dependencies:
|
|
121
121
|
requirements:
|
122
122
|
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.25.3
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
requirement: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
128
|
- - '='
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
130
|
+
version: 0.23.2
|
131
131
|
name: opentelemetry-instrumentation-sinatra
|
132
132
|
prerelease: false
|
133
133
|
type: :runtime
|
@@ -135,13 +135,13 @@ dependencies:
|
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.23.2
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
requirement: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
142
|
- - '='
|
143
143
|
- !ruby/object:Gem::Version
|
144
|
-
version: 0.
|
144
|
+
version: 0.24.1
|
145
145
|
name: opentelemetry-resource_detectors
|
146
146
|
prerelease: false
|
147
147
|
type: :runtime
|
@@ -149,16 +149,16 @@ dependencies:
|
|
149
149
|
requirements:
|
150
150
|
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.
|
152
|
+
version: 0.24.1
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
requirement: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
156
|
- - "~>"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: '1.
|
158
|
+
version: '1.3'
|
159
159
|
- - ">="
|
160
160
|
- !ruby/object:Gem::Version
|
161
|
-
version: 1.0
|
161
|
+
version: 1.3.0
|
162
162
|
name: opentelemetry-sdk
|
163
163
|
prerelease: false
|
164
164
|
type: :runtime
|
@@ -166,10 +166,10 @@ dependencies:
|
|
166
166
|
requirements:
|
167
167
|
- - "~>"
|
168
168
|
- !ruby/object:Gem::Version
|
169
|
-
version: '1.
|
169
|
+
version: '1.3'
|
170
170
|
- - ">="
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: 1.0
|
172
|
+
version: 1.3.0
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
174
|
requirement: !ruby/object:Gem::Requirement
|
175
175
|
requirements:
|
@@ -263,7 +263,7 @@ dependencies:
|
|
263
263
|
requirements:
|
264
264
|
- - "~>"
|
265
265
|
- !ruby/object:Gem::Version
|
266
|
-
version: '
|
266
|
+
version: '5.0'
|
267
267
|
name: redis
|
268
268
|
prerelease: false
|
269
269
|
type: :runtime
|
@@ -271,7 +271,7 @@ dependencies:
|
|
271
271
|
requirements:
|
272
272
|
- - "~>"
|
273
273
|
- !ruby/object:Gem::Version
|
274
|
-
version: '
|
274
|
+
version: '5.0'
|
275
275
|
- !ruby/object:Gem::Dependency
|
276
276
|
requirement: !ruby/object:Gem::Requirement
|
277
277
|
requirements:
|
@@ -395,7 +395,7 @@ dependencies:
|
|
395
395
|
requirements:
|
396
396
|
- - "~>"
|
397
397
|
- !ruby/object:Gem::Version
|
398
|
-
version: 1.
|
398
|
+
version: 1.56.0
|
399
399
|
name: rubocop
|
400
400
|
prerelease: false
|
401
401
|
type: :development
|
@@ -403,7 +403,7 @@ dependencies:
|
|
403
403
|
requirements:
|
404
404
|
- - "~>"
|
405
405
|
- !ruby/object:Gem::Version
|
406
|
-
version: 1.
|
406
|
+
version: 1.56.0
|
407
407
|
- !ruby/object:Gem::Dependency
|
408
408
|
requirement: !ruby/object:Gem::Requirement
|
409
409
|
requirements:
|
@@ -518,7 +518,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
518
518
|
- !ruby/object:Gem::Version
|
519
519
|
version: '0'
|
520
520
|
requirements: []
|
521
|
-
rubygems_version: 3.3.
|
521
|
+
rubygems_version: 3.3.26
|
522
522
|
signing_key:
|
523
523
|
specification_version: 4
|
524
524
|
summary: vmpooler provides configurable pools of instantly-available (running) virtual
|