vmpooler 0.18.0 → 1.1.0

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.
@@ -5,9 +5,6 @@ module Vmpooler
5
5
  class DummyStatsd < Metrics
6
6
  attr_reader :server, :port, :prefix
7
7
 
8
- def initialize(*)
9
- end
10
-
11
8
  def increment(*)
12
9
  true
13
10
  end
@@ -7,6 +7,7 @@ module Vmpooler
7
7
  class Graphite < Metrics
8
8
  attr_reader :server, :port, :prefix
9
9
 
10
+ # rubocop:disable Lint/MissingSuper
10
11
  def initialize(logger, params = {})
11
12
  raise ArgumentError, "Graphite server is required. Config: #{params.inspect}" if params['server'].nil? || params['server'].empty?
12
13
 
@@ -15,6 +16,7 @@ module Vmpooler
15
16
  @prefix = params['prefix'] || 'vmpooler'
16
17
  @logger = logger
17
18
  end
19
+ # rubocop:enable Lint/MissingSuper
18
20
 
19
21
  def increment(label)
20
22
  log label, 1
@@ -23,6 +23,7 @@ module Vmpooler
23
23
  @p_metrics = {}
24
24
  @torun = []
25
25
 
26
+ # rubocop:disable Lint/MissingSuper
26
27
  def initialize(logger, params = {})
27
28
  @prefix = params['prefix'] || 'vmpooler'
28
29
  @prometheus_prefix = params['prometheus_prefix'] || 'vmpooler'
@@ -32,6 +33,7 @@ module Vmpooler
32
33
  # Setup up prometheus registry and data structures
33
34
  @prometheus = Prometheus::Client.registry
34
35
  end
36
+ # rubocop:enable Lint/MissingSuper
35
37
 
36
38
  =begin # rubocop:disable Style/BlockComments
37
39
  The Metrics table is used to register metrics and translate/interpret the incoming metrics.
@@ -163,33 +165,33 @@ module Vmpooler
163
165
  },
164
166
  user: {
165
167
  mtype: M_COUNTER,
166
- torun: %i[manager],
167
- docstring: 'Number of pool instances this user created created',
168
- param_labels: %i[user poolname]
168
+ torun: %i[api],
169
+ docstring: 'Number of pool instances and the operation performed by a user',
170
+ param_labels: %i[user operation poolname]
169
171
  },
170
172
  usage_litmus: {
171
173
  mtype: M_COUNTER,
172
- torun: %i[manager],
173
- docstring: 'Pools by Litmus job usage',
174
- param_labels: %i[user poolname]
174
+ torun: %i[api],
175
+ docstring: 'Number of pool instances and the operation performed by Litmus jobs',
176
+ param_labels: %i[user operation poolname]
175
177
  },
176
178
  usage_jenkins_instance: {
177
179
  mtype: M_COUNTER,
178
- torun: %i[manager],
179
- docstring: 'Pools by Jenkins instance usage',
180
- param_labels: %i[jenkins_instance value_stream poolname]
180
+ torun: %i[api],
181
+ docstring: 'Number of pool instances and the operation performed by Jenkins instances',
182
+ param_labels: %i[jenkins_instance value_stream operation poolname]
181
183
  },
182
184
  usage_branch_project: {
183
185
  mtype: M_COUNTER,
184
- torun: %i[manager],
185
- docstring: 'Pools by branch/project usage',
186
- param_labels: %i[branch project poolname]
186
+ torun: %i[api],
187
+ docstring: 'Number of pool instances and the operation performed by Jenkins branch/project',
188
+ param_labels: %i[branch project operation poolname]
187
189
  },
188
190
  usage_job_component: {
189
191
  mtype: M_COUNTER,
190
- torun: %i[manager],
191
- docstring: 'Pools by job/component usage',
192
- param_labels: %i[job_name component_to_test poolname]
192
+ torun: %i[api],
193
+ docstring: 'Number of pool instances and the operation performed by Jenkins job/component',
194
+ param_labels: %i[job_name component_to_test operation poolname]
193
195
  },
194
196
  checkout: {
195
197
  mtype: M_COUNTER,
@@ -113,7 +113,7 @@ module Vmpooler
113
113
  # Similarly, request IDs are also stripped from the /ondemand path.
114
114
  path
115
115
  .gsub(%r{/vm/.+$}, '/vm')
116
- .gsub(%r{/ondemand/.+$}, '/ondemand')
116
+ .gsub(%r{/ondemandvm/.+$}, '/ondemandvm')
117
117
  .gsub(%r{/token/.+$}, '/token')
118
118
  .gsub(%r{/lib/.+$}, '/lib')
119
119
  .gsub(%r{/img/.+$}, '/img')
@@ -8,6 +8,7 @@ module Vmpooler
8
8
  class Statsd < Metrics
9
9
  attr_reader :server, :port, :prefix
10
10
 
11
+ # rubocop:disable Lint/MissingSuper
11
12
  def initialize(logger, params = {})
12
13
  raise ArgumentError, "Statsd server is required. Config: #{params.inspect}" if params['server'].nil? || params['server'].empty?
13
14
 
@@ -17,21 +18,22 @@ module Vmpooler
17
18
  @server = ::Statsd.new(host, @port)
18
19
  @logger = logger
19
20
  end
21
+ # rubocop:enable Lint/MissingSuper
20
22
 
21
23
  def increment(label)
22
- server.increment(prefix + '.' + label)
24
+ server.increment("#{prefix}.#{label}")
23
25
  rescue StandardError => e
24
26
  @logger.log('s', "[!] Failure incrementing #{prefix}.#{label} on statsd server [#{server}:#{port}]: #{e}")
25
27
  end
26
28
 
27
29
  def gauge(label, value)
28
- server.gauge(prefix + '.' + label, value)
30
+ server.gauge("#{prefix}.#{label}", value)
29
31
  rescue StandardError => e
30
32
  @logger.log('s', "[!] Failure updating gauge #{prefix}.#{label} on statsd server [#{server}:#{port}]: #{e}")
31
33
  end
32
34
 
33
35
  def timing(label, duration)
34
- server.timing(prefix + '.' + label, duration)
36
+ server.timing("#{prefix}.#{label}", duration)
35
37
  rescue StandardError => e
36
38
  @logger.log('s', "[!] Failure updating timing #{prefix}.#{label} on statsd server [#{server}:#{port}]: #{e}")
37
39
  end
@@ -108,7 +108,7 @@ module Vmpooler
108
108
  $logger.log('d', "[!] [#{pool}] '#{vm}' no longer exists. Removing from pending.")
109
109
  end
110
110
 
111
- def fail_pending_vm(vm, pool, timeout, redis, exists = true)
111
+ def fail_pending_vm(vm, pool, timeout, redis, exists: true)
112
112
  clone_stamp = redis.hget("vmpooler__vm__#{vm}", 'clone')
113
113
 
114
114
  time_since_clone = (Time.now - Time.parse(clone_stamp)) / 60
@@ -117,7 +117,7 @@ module Vmpooler
117
117
  request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id')
118
118
  pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias') if request_id
119
119
  redis.multi
120
- redis.smove('vmpooler__pending__' + pool, 'vmpooler__completed__' + pool, vm)
120
+ redis.smove("vmpooler__pending__#{pool}", "vmpooler__completed__#{pool}", vm)
121
121
  redis.zadd('vmpooler__odcreate__task', 1, "#{pool_alias}:#{pool}:1:#{request_id}") if request_id
122
122
  redis.exec
123
123
  $metrics.increment("errors.markedasfailed.#{pool}")
@@ -133,15 +133,16 @@ module Vmpooler
133
133
  end
134
134
 
135
135
  def move_pending_vm_to_ready(vm, pool, redis, request_id = nil)
136
- clone_time = redis.hget('vmpooler__vm__' + vm, 'clone')
136
+ clone_time = redis.hget("vmpooler__vm__#{vm}", 'clone')
137
137
  finish = format('%<time>.2f', time: Time.now - Time.parse(clone_time))
138
138
 
139
139
  if request_id
140
140
  ondemandrequest_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
141
- if ondemandrequest_hash['status'] == 'failed'
141
+ case ondemandrequest_hash['status']
142
+ when 'failed'
142
143
  move_vm_queue(pool, vm, 'pending', 'completed', redis, "moved to completed queue. '#{request_id}' could not be filled in time")
143
144
  return nil
144
- elsif ondemandrequest_hash['status'] == 'deleted'
145
+ when 'deleted'
145
146
  move_vm_queue(pool, vm, 'pending', 'completed', redis, "moved to completed queue. '#{request_id}' has been deleted")
146
147
  return nil
147
148
  end
@@ -160,11 +161,11 @@ module Vmpooler
160
161
  move_vm_queue(pool, vm, 'pending', 'running', redis)
161
162
  check_ondemand_request_ready(request_id, redis)
162
163
  else
163
- redis.smove('vmpooler__pending__' + pool, 'vmpooler__ready__' + pool, vm)
164
+ redis.smove("vmpooler__pending__#{pool}", "vmpooler__ready__#{pool}", vm)
164
165
  end
165
166
 
166
167
  redis.pipelined do
167
- redis.hset('vmpooler__boot__' + Date.today.to_s, pool + ':' + vm, finish) # maybe remove as this is never used by vmpooler itself?
168
+ redis.hset("vmpooler__boot__#{Date.today}", "#{pool}:#{vm}", finish) # maybe remove as this is never used by vmpooler itself?
168
169
  redis.hset("vmpooler__vm__#{vm}", 'ready', Time.now)
169
170
 
170
171
  # last boot time is displayed in API, and used by alarming script
@@ -203,11 +204,11 @@ module Vmpooler
203
204
 
204
205
  mutex.synchronize do
205
206
  @redis.with_metrics do |redis|
206
- check_stamp = redis.hget('vmpooler__vm__' + vm, 'check')
207
+ check_stamp = redis.hget("vmpooler__vm__#{vm}", 'check')
207
208
  last_checked_too_soon = ((Time.now - Time.parse(check_stamp)).to_i < $config[:config]['vm_checktime'] * 60) if check_stamp
208
209
  break if check_stamp && last_checked_too_soon
209
210
 
210
- redis.hset('vmpooler__vm__' + vm, 'check', Time.now)
211
+ redis.hset("vmpooler__vm__#{vm}", 'check', Time.now)
211
212
  # Check if the hosts TTL has expired
212
213
  # if 'boottime' is nil, set bootime to beginning of unix epoch, forces TTL to be assumed expired
213
214
  boottime = redis.hget("vmpooler__vm__#{vm}", 'ready')
@@ -217,7 +218,7 @@ module Vmpooler
217
218
  boottime = Time.at(0)
218
219
  end
219
220
  if (Time.now - boottime).to_i > ttl * 60
220
- redis.smove('vmpooler__ready__' + pool_name, 'vmpooler__completed__' + pool_name, vm)
221
+ redis.smove("vmpooler__ready__#{pool_name}", "vmpooler__completed__#{pool_name}", vm)
221
222
 
222
223
  $logger.log('d', "[!] [#{pool_name}] '#{vm}' reached end of TTL after #{ttl} minutes, removed from 'ready' queue")
223
224
  return nil
@@ -256,7 +257,7 @@ module Vmpooler
256
257
  return if hostname.empty?
257
258
  return if hostname == vm
258
259
 
259
- redis.smove('vmpooler__ready__' + pool_name, 'vmpooler__completed__' + pool_name, vm)
260
+ redis.smove("vmpooler__ready__#{pool_name}", "vmpooler__completed__#{pool_name}", vm)
260
261
  $logger.log('d', "[!] [#{pool_name}] '#{vm}' has mismatched hostname #{hostname}, removed from 'ready' queue")
261
262
  true
262
263
  end
@@ -280,7 +281,7 @@ module Vmpooler
280
281
  catch :stop_checking do
281
282
  @redis.with_metrics do |redis|
282
283
  # Check that VM is within defined lifetime
283
- checkouttime = redis.hget('vmpooler__active__' + pool, vm)
284
+ checkouttime = redis.hget("vmpooler__active__#{pool}", vm)
284
285
  if checkouttime
285
286
  time_since_checkout = Time.now - Time.parse(checkouttime)
286
287
  running = time_since_checkout / 60 / 60
@@ -341,7 +342,7 @@ module Vmpooler
341
342
  adjective = @name_generator.adjective(max: 14 - noun.length)
342
343
  random_name = [adjective, noun].join('-')
343
344
  hostname = $config[:config]['prefix'] + random_name
344
- available = redis.hlen('vmpooler__vm__' + hostname) == 0
345
+ available = redis.hlen("vmpooler__vm__#{hostname}") == 0
345
346
 
346
347
  [hostname, available]
347
348
  end
@@ -395,12 +396,12 @@ module Vmpooler
395
396
  @redis.with_metrics do |redis|
396
397
  # Add VM to Redis inventory ('pending' pool)
397
398
  redis.multi
398
- redis.sadd('vmpooler__pending__' + pool_name, new_vmname)
399
- redis.hset('vmpooler__vm__' + new_vmname, 'clone', Time.now)
400
- redis.hset('vmpooler__vm__' + new_vmname, 'template', pool_name) # This value is used to represent the pool.
401
- redis.hset('vmpooler__vm__' + new_vmname, 'pool', pool_name)
402
- redis.hset('vmpooler__vm__' + new_vmname, 'request_id', request_id) if request_id
403
- redis.hset('vmpooler__vm__' + new_vmname, 'pool_alias', pool_alias) if pool_alias
399
+ redis.sadd("vmpooler__pending__#{pool_name}", new_vmname)
400
+ redis.hset("vmpooler__vm__#{new_vmname}", 'clone', Time.now)
401
+ redis.hset("vmpooler__vm__#{new_vmname}", 'template', pool_name) # This value is used to represent the pool.
402
+ redis.hset("vmpooler__vm__#{new_vmname}", 'pool', pool_name)
403
+ redis.hset("vmpooler__vm__#{new_vmname}", 'request_id', request_id) if request_id
404
+ redis.hset("vmpooler__vm__#{new_vmname}", 'pool_alias', pool_alias) if pool_alias
404
405
  redis.exec
405
406
  end
406
407
 
@@ -412,8 +413,8 @@ module Vmpooler
412
413
 
413
414
  @redis.with_metrics do |redis|
414
415
  redis.pipelined do
415
- redis.hset('vmpooler__clone__' + Date.today.to_s, pool_name + ':' + new_vmname, finish)
416
- redis.hset('vmpooler__vm__' + new_vmname, 'clone_time', finish)
416
+ redis.hset("vmpooler__clone__#{Date.today}", "#{pool_name}:#{new_vmname}", finish)
417
+ redis.hset("vmpooler__vm__#{new_vmname}", 'clone_time', finish)
417
418
  end
418
419
  end
419
420
  $logger.log('s', "[+] [#{pool_name}] '#{new_vmname}' cloned in #{finish} seconds")
@@ -456,70 +457,27 @@ module Vmpooler
456
457
  mutex.synchronize do
457
458
  @redis.with_metrics do |redis|
458
459
  redis.pipelined do
459
- redis.hdel('vmpooler__active__' + pool, vm)
460
- redis.hset('vmpooler__vm__' + vm, 'destroy', Time.now)
460
+ redis.hdel("vmpooler__active__#{pool}", vm)
461
+ redis.hset("vmpooler__vm__#{vm}", 'destroy', Time.now)
461
462
 
462
463
  # Auto-expire metadata key
463
- redis.expire('vmpooler__vm__' + vm, ($config[:redis]['data_ttl'].to_i * 60 * 60))
464
+ redis.expire("vmpooler__vm__#{vm}", ($config[:redis]['data_ttl'].to_i * 60 * 60))
464
465
  end
465
466
 
466
467
  start = Time.now
467
468
 
468
469
  provider.destroy_vm(pool, vm)
469
470
 
470
- redis.srem('vmpooler__completed__' + pool, vm)
471
+ redis.srem("vmpooler__completed__#{pool}", vm)
471
472
 
472
473
  finish = format('%<time>.2f', time: Time.now - start)
473
474
  $logger.log('s', "[-] [#{pool}] '#{vm}' destroyed in #{finish} seconds")
474
475
  $metrics.timing("destroy.#{pool}", finish)
475
- get_vm_usage_labels(vm, redis)
476
476
  end
477
477
  end
478
478
  dereference_mutex(vm)
479
479
  end
480
480
 
481
- def get_vm_usage_labels(vm, redis)
482
- return unless $config[:config]['usage_stats']
483
-
484
- redis.multi
485
- redis.hget("vmpooler__vm__#{vm}", 'checkout')
486
- redis.hget("vmpooler__vm__#{vm}", 'tag:jenkins_build_url')
487
- redis.hget("vmpooler__vm__#{vm}", 'token:user')
488
- redis.hget("vmpooler__vm__#{vm}", 'template')
489
- checkout, jenkins_build_url, user, poolname = redis.exec
490
- return if checkout.nil?
491
-
492
- user ||= 'unauthenticated'
493
- user = user.gsub('.', '_')
494
- $metrics.increment("user.#{user}.#{poolname}")
495
-
496
- return unless jenkins_build_url
497
-
498
- if jenkins_build_url.include? 'litmus'
499
- # Very simple filter for Litmus jobs - just count them coming through for the moment.
500
- $metrics.increment("usage_litmus.#{user}.#{poolname}")
501
- return
502
- end
503
-
504
- url_parts = jenkins_build_url.split('/')[2..-1]
505
- jenkins_instance = url_parts[0].gsub('.', '_')
506
- value_stream_parts = url_parts[2].split('_')
507
- value_stream_parts = value_stream_parts.map { |s| s.gsub('.', '_') }
508
- value_stream = value_stream_parts.shift
509
- branch = value_stream_parts.pop
510
- project = value_stream_parts.shift
511
- job_name = value_stream_parts.join('_')
512
- build_metadata_parts = url_parts[3]
513
- component_to_test = component_to_test('RMM_COMPONENT_TO_TEST_NAME', build_metadata_parts)
514
-
515
- $metrics.increment("usage_jenkins_instance.#{jenkins_instance}.#{value_stream}.#{poolname}")
516
- $metrics.increment("usage_branch_project.#{branch}.#{project}.#{poolname}")
517
- $metrics.increment("usage_job_component.#{job_name}.#{component_to_test}.#{poolname}")
518
- rescue StandardError => e
519
- $logger.log('d', "[!] [#{poolname}] failed while evaluating usage labels on '#{vm}' with an error: #{e}")
520
- raise
521
- end
522
-
523
481
  def component_to_test(match, labels_string)
524
482
  return if labels_string.nil?
525
483
 
@@ -603,10 +561,10 @@ module Vmpooler
603
561
 
604
562
  if result
605
563
  @redis.with_metrics do |redis|
606
- rdisks = redis.hget('vmpooler__vm__' + vm_name, 'disk')
564
+ rdisks = redis.hget("vmpooler__vm__#{vm_name}", 'disk')
607
565
  disks = rdisks ? rdisks.split(':') : []
608
566
  disks.push("+#{disk_size}gb")
609
- redis.hset('vmpooler__vm__' + vm_name, 'disk', disks.join(':'))
567
+ redis.hset("vmpooler__vm__#{vm_name}", 'disk', disks.join(':'))
610
568
  end
611
569
 
612
570
  $logger.log('s', "[+] [disk_manager] '#{vm_name}' attached #{disk_size}gb disk in #{finish} seconds")
@@ -638,7 +596,7 @@ module Vmpooler
638
596
 
639
597
  if result
640
598
  @redis.with_metrics do |redis|
641
- redis.hset('vmpooler__vm__' + vm_name, 'snapshot:' + snapshot_name, Time.now.to_s)
599
+ redis.hset("vmpooler__vm__#{vm_name}", "snapshot:#{snapshot_name}", Time.now.to_s)
642
600
  end
643
601
  $logger.log('s', "[+] [snapshot_manager] '#{vm_name}' snapshot created in #{finish} seconds")
644
602
  else
@@ -697,7 +655,7 @@ module Vmpooler
697
655
 
698
656
  def get_pool_name_for_vm(vm_name, redis)
699
657
  # the 'template' is a bad name. Should really be 'poolname'
700
- redis.hget('vmpooler__vm__' + vm_name, 'template')
658
+ redis.hget("vmpooler__vm__#{vm_name}", 'template')
701
659
  end
702
660
 
703
661
  # @param pool_name [String] - the name of the pool
@@ -867,16 +825,12 @@ module Vmpooler
867
825
 
868
826
  if options[:clone_target_change]
869
827
  clone_target = redis.hget('vmpooler__config__clone_target}', options[:poolname])
870
- if clone_target
871
- break unless clone_target == initial_clone_target
872
- end
828
+ break if clone_target && clone_target != initial_clone_target
873
829
  end
874
830
 
875
831
  if options[:pool_template_change]
876
832
  configured_template = redis.hget('vmpooler__config__template', options[:poolname])
877
- if configured_template
878
- break unless initial_template == configured_template
879
- end
833
+ break if configured_template && initial_template != configured_template
880
834
  end
881
835
 
882
836
  if options[:pool_reset]
@@ -970,21 +924,17 @@ module Vmpooler
970
924
  def sync_pool_template(pool)
971
925
  @redis.with_metrics do |redis|
972
926
  pool_template = redis.hget('vmpooler__config__template', pool['name'])
973
- if pool_template
974
- pool['template'] = pool_template unless pool['template'] == pool_template
975
- end
927
+ pool['template'] = pool_template if pool_template && pool['template'] != pool_template
976
928
  end
977
929
  end
978
930
 
979
931
  def prepare_template(pool, provider, redis)
980
- if $config[:config]['create_template_delta_disks']
981
- unless redis.sismember('vmpooler__template__deltas', pool['template'])
982
- begin
983
- provider.create_template_delta_disks(pool)
984
- redis.sadd('vmpooler__template__deltas', pool['template'])
985
- rescue StandardError => e
986
- $logger.log('s', "[!] [#{pool['name']}] failed while preparing a template with an error. As a result vmpooler could not create the template delta disks. Either a template delta disk already exists, or the template delta disk creation failed. The error is: #{e}")
987
- end
932
+ if $config[:config]['create_template_delta_disks'] && !redis.sismember('vmpooler__template__deltas', pool['template'])
933
+ begin
934
+ provider.create_template_delta_disks(pool)
935
+ redis.sadd('vmpooler__template__deltas', pool['template'])
936
+ rescue StandardError => e
937
+ $logger.log('s', "[!] [#{pool['name']}] failed while preparing a template with an error. As a result vmpooler could not create the template delta disks. Either a template delta disk already exists, or the template delta disk creation failed. The error is: #{e}")
988
938
  end
989
939
  end
990
940
  redis.hset('vmpooler__template__prepared', pool['name'], pool['template'])
@@ -1135,15 +1085,15 @@ module Vmpooler
1135
1085
  mutex.synchronize do
1136
1086
  @redis.with_metrics do |redis|
1137
1087
  provider.vms_in_pool(pool['name']).each do |vm|
1138
- if !redis.sismember('vmpooler__running__' + pool['name'], vm['name']) &&
1139
- !redis.sismember('vmpooler__ready__' + pool['name'], vm['name']) &&
1140
- !redis.sismember('vmpooler__pending__' + pool['name'], vm['name']) &&
1141
- !redis.sismember('vmpooler__completed__' + pool['name'], vm['name']) &&
1142
- !redis.sismember('vmpooler__discovered__' + pool['name'], vm['name']) &&
1143
- !redis.sismember('vmpooler__migrating__' + pool['name'], vm['name'])
1088
+ if !redis.sismember("vmpooler__running__#{pool['name']}", vm['name']) &&
1089
+ !redis.sismember("vmpooler__ready__#{pool['name']}", vm['name']) &&
1090
+ !redis.sismember("vmpooler__pending__#{pool['name']}", vm['name']) &&
1091
+ !redis.sismember("vmpooler__completed__#{pool['name']}", vm['name']) &&
1092
+ !redis.sismember("vmpooler__discovered__#{pool['name']}", vm['name']) &&
1093
+ !redis.sismember("vmpooler__migrating__#{pool['name']}", vm['name'])
1144
1094
 
1145
1095
  pool_check_response[:discovered_vms] += 1
1146
- redis.sadd('vmpooler__discovered__' + pool['name'], vm['name'])
1096
+ redis.sadd("vmpooler__discovered__#{pool['name']}", vm['name'])
1147
1097
 
1148
1098
  $logger.log('s', "[?] [#{pool['name']}] '#{vm['name']}' added to 'discovered' queue")
1149
1099
  end
@@ -1164,7 +1114,7 @@ module Vmpooler
1164
1114
  redis.smembers("vmpooler__running__#{pool_name}").each do |vm|
1165
1115
  if inventory[vm]
1166
1116
  begin
1167
- vm_lifetime = redis.hget('vmpooler__vm__' + vm, 'lifetime') || $config[:config]['vm_lifetime'] || 12
1117
+ vm_lifetime = redis.hget("vmpooler__vm__#{vm}", 'lifetime') || $config[:config]['vm_lifetime'] || 12
1168
1118
  pool_check_response[:checked_running_vms] += 1
1169
1119
  check_running_vm(vm, pool_name, vm_lifetime, provider)
1170
1120
  rescue StandardError => e
@@ -1206,7 +1156,7 @@ module Vmpooler
1206
1156
  $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating pending VMs: #{e}")
1207
1157
  end
1208
1158
  else
1209
- fail_pending_vm(vm, pool_name, pool_timeout, redis, false)
1159
+ fail_pending_vm(vm, pool_name, pool_timeout, redis, exists: false)
1210
1160
  end
1211
1161
  end
1212
1162
  end