vmpooler 0.10.3 → 0.11.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.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'vmpooler/providers'
2
4
  require 'spicy-proton'
3
5
 
@@ -54,7 +56,7 @@ module Vmpooler
54
56
  pool_keys.each do |k|
55
57
  to_set[k] = pool[k]
56
58
  end
57
- to_set['alias'] = pool['alias'].join(',') if to_set.has_key?('alias')
59
+ to_set['alias'] = pool['alias'].join(',') if to_set.key?('alias')
58
60
  $redis.hmset("vmpooler__pool__#{pool['name']}", to_set.to_a.flatten) unless to_set.empty?
59
61
  end
60
62
  previously_configured_pools.each do |pool|
@@ -63,7 +65,7 @@ module Vmpooler
63
65
  $redis.del("vmpooler__pool__#{pool}")
64
66
  end
65
67
  end
66
- return
68
+ nil
67
69
  end
68
70
 
69
71
  # Check the state of a VM
@@ -71,8 +73,8 @@ module Vmpooler
71
73
  Thread.new do
72
74
  begin
73
75
  _check_pending_vm(vm, pool, timeout, provider)
74
- rescue => err
75
- $logger.log('s', "[!] [#{pool}] '#{vm}' #{timeout} #{provider} errored while checking a pending vm : #{err}")
76
+ rescue StandardError => e
77
+ $logger.log('s', "[!] [#{pool}] '#{vm}' #{timeout} #{provider} errored while checking a pending vm : #{e}")
76
78
  fail_pending_vm(vm, pool, timeout)
77
79
  raise
78
80
  end
@@ -82,6 +84,7 @@ module Vmpooler
82
84
  def _check_pending_vm(vm, pool, timeout, provider)
83
85
  mutex = vm_mutex(vm)
84
86
  return if mutex.locked?
87
+
85
88
  mutex.synchronize do
86
89
  if provider.vm_ready?(pool, vm)
87
90
  move_pending_vm_to_ready(vm, pool)
@@ -111,14 +114,14 @@ module Vmpooler
111
114
  end
112
115
  end
113
116
  true
114
- rescue => err
115
- $logger.log('d', "Fail pending VM failed with an error: #{err}")
117
+ rescue StandardError => e
118
+ $logger.log('d', "Fail pending VM failed with an error: #{e}")
116
119
  false
117
120
  end
118
121
 
119
122
  def move_pending_vm_to_ready(vm, pool)
120
123
  clone_time = $redis.hget('vmpooler__vm__' + vm, 'clone')
121
- finish = format('%.2f', Time.now - Time.parse(clone_time)) if clone_time
124
+ finish = format('%<time>.2f', time: Time.now - Time.parse(clone_time)) if clone_time
122
125
 
123
126
  $redis.smove('vmpooler__pending__' + pool, 'vmpooler__ready__' + pool, vm)
124
127
  $redis.hset('vmpooler__boot__' + Date.today.to_s, pool + ':' + vm, finish) # maybe remove as this is never used by vmpooler itself?
@@ -134,8 +137,9 @@ module Vmpooler
134
137
  def vm_still_ready?(pool_name, vm_name, provider)
135
138
  # Check if the VM is still ready/available
136
139
  return true if provider.vm_ready?(pool_name, vm_name)
140
+
137
141
  raise("VM #{vm_name} is not ready")
138
- rescue
142
+ rescue StandardError
139
143
  move_vm_queue(pool_name, vm_name, 'ready', 'completed', "is unreachable, removed from 'ready' queue")
140
144
  end
141
145
 
@@ -143,8 +147,8 @@ module Vmpooler
143
147
  Thread.new do
144
148
  begin
145
149
  _check_ready_vm(vm, pool_name, ttl, provider)
146
- rescue => err
147
- $logger.log('s', "[!] [#{pool_name}] '#{vm}' failed while checking a ready vm : #{err}")
150
+ rescue StandardError => e
151
+ $logger.log('s', "[!] [#{pool_name}] '#{vm}' failed while checking a ready vm : #{e}")
148
152
  raise
149
153
  end
150
154
  end
@@ -154,6 +158,7 @@ module Vmpooler
154
158
  # Periodically check that the VM is available
155
159
  mutex = vm_mutex(vm)
156
160
  return if mutex.locked?
161
+
157
162
  mutex.synchronize do
158
163
  check_stamp = $redis.hget('vmpooler__vm__' + vm, 'check')
159
164
  return if check_stamp && (((Time.now - Time.parse(check_stamp)) / 60) <= $config[:config]['vm_checktime'])
@@ -176,13 +181,13 @@ module Vmpooler
176
181
  end
177
182
  end
178
183
 
179
- return if has_mismatched_hostname?(vm, pool_name, provider)
184
+ return if mismatched_hostname?(vm, pool_name, provider)
180
185
 
181
186
  vm_still_ready?(pool_name, vm, provider)
182
187
  end
183
188
  end
184
189
 
185
- def has_mismatched_hostname?(vm, pool_name, provider)
190
+ def mismatched_hostname?(vm, pool_name, provider)
186
191
  pool_config = $config[:pools][$config[:pool_index][pool_name]]
187
192
  check_hostname = pool_config['check_hostname_for_mismatch']
188
193
  check_hostname = $config[:config]['check_ready_vm_hostname_for_mismatch'] if check_hostname.nil?
@@ -201,22 +206,24 @@ module Vmpooler
201
206
  # Check if the hostname has magically changed from underneath Pooler
202
207
  vm_hash = provider.get_vm(pool_name, vm)
203
208
  return unless vm_hash.is_a? Hash
209
+
204
210
  hostname = vm_hash['hostname']
205
211
 
206
212
  return if hostname.nil?
207
213
  return if hostname.empty?
208
214
  return if hostname == vm
215
+
209
216
  $redis.smove('vmpooler__ready__' + pool_name, 'vmpooler__completed__' + pool_name, vm)
210
217
  $logger.log('d', "[!] [#{pool_name}] '#{vm}' has mismatched hostname #{hostname}, removed from 'ready' queue")
211
- return true
218
+ true
212
219
  end
213
220
 
214
221
  def check_running_vm(vm, pool, ttl, provider)
215
222
  Thread.new do
216
223
  begin
217
224
  _check_running_vm(vm, pool, ttl, provider)
218
- rescue => err
219
- $logger.log('s', "[!] [#{pool}] '#{vm}' failed while checking VM with an error: #{err}")
225
+ rescue StandardError => e
226
+ $logger.log('s', "[!] [#{pool}] '#{vm}' failed while checking VM with an error: #{e}")
220
227
  raise
221
228
  end
222
229
  end
@@ -225,6 +232,7 @@ module Vmpooler
225
232
  def _check_running_vm(vm, pool, ttl, provider)
226
233
  mutex = vm_mutex(vm)
227
234
  return if mutex.locked?
235
+
228
236
  mutex.synchronize do
229
237
  # Check that VM is within defined lifetime
230
238
  checkouttime = $redis.hget('vmpooler__active__' + pool, vm)
@@ -245,7 +253,7 @@ module Vmpooler
245
253
  if host
246
254
  return
247
255
  else
248
- move_vm_queue(pool, vm, 'running', 'completed', "is no longer in inventory, removing from running")
256
+ move_vm_queue(pool, vm, 'running', 'completed', 'is no longer in inventory, removing from running')
249
257
  end
250
258
  end
251
259
  end
@@ -261,14 +269,14 @@ module Vmpooler
261
269
  Thread.new do
262
270
  begin
263
271
  _clone_vm(pool_name, provider)
264
- rescue => err
265
- $logger.log('s', "[!] [#{pool_name}] failed while cloning VM with an error: #{err}")
272
+ rescue StandardError => e
273
+ $logger.log('s', "[!] [#{pool_name}] failed while cloning VM with an error: #{e}")
266
274
  raise
267
275
  end
268
276
  end
269
277
  end
270
278
 
271
- def generate_and_check_hostname(pool_name)
279
+ def generate_and_check_hostname(_pool_name)
272
280
  # Generate a randomized hostname. The total name must no longer than 15
273
281
  # character including the hyphen. The shortest adjective in the corpus is
274
282
  # three characters long. Therefore, we can technically select a noun up to 11
@@ -278,12 +286,12 @@ module Vmpooler
278
286
  # inviting more conflicts. We favor selecting a longer noun rather than a
279
287
  # longer adjective because longer adjectives tend to be less fun.
280
288
  noun = @name_generator.noun(max: 10)
281
- adjective = @name_generator.adjective(max: 14-noun.length)
289
+ adjective = @name_generator.adjective(max: 14 - noun.length)
282
290
  random_name = [adjective, noun].join('-')
283
291
  hostname = $config[:config]['prefix'] + random_name
284
292
  available = $redis.hlen('vmpooler__vm__' + hostname) == 0
285
293
 
286
- return hostname, available
294
+ [hostname, available]
287
295
  end
288
296
 
289
297
  def find_unique_hostname(pool_name)
@@ -297,9 +305,9 @@ module Vmpooler
297
305
  $metrics.increment("errors.duplicatehostname.#{pool_name}")
298
306
  $logger.log('s', "[!] [#{pool_name}] Generated hostname #{hostname} was not unique (attempt \##{hostname_retries} of #{max_hostname_retries})")
299
307
  end
300
-
308
+
301
309
  raise "Unable to generate a unique hostname after #{hostname_retries} attempts. The last hostname checked was #{hostname}" unless available
302
-
310
+
303
311
  hostname
304
312
  end
305
313
 
@@ -315,18 +323,18 @@ module Vmpooler
315
323
  $logger.log('d', "[ ] [#{pool_name}] Starting to clone '#{new_vmname}'")
316
324
  start = Time.now
317
325
  provider.create_vm(pool_name, new_vmname)
318
- finish = format('%.2f', Time.now - start)
326
+ finish = format('%<time>.2f', time: Time.now - start)
319
327
 
320
328
  $redis.hset('vmpooler__clone__' + Date.today.to_s, pool_name + ':' + new_vmname, finish)
321
329
  $redis.hset('vmpooler__vm__' + new_vmname, 'clone_time', finish)
322
330
  $logger.log('s', "[+] [#{pool_name}] '#{new_vmname}' cloned in #{finish} seconds")
323
331
 
324
332
  $metrics.timing("clone.#{pool_name}", finish)
325
- rescue => _err
333
+ rescue StandardError
326
334
  $redis.srem("vmpooler__pending__#{pool_name}", new_vmname)
327
335
  expiration_ttl = $config[:redis]['data_ttl'].to_i * 60 * 60
328
336
  $redis.expire("vmpooler__vm__#{new_vmname}", expiration_ttl)
329
- raise _err
337
+ raise
330
338
  ensure
331
339
  $redis.decr('vmpooler__tasks__clone')
332
340
  end
@@ -337,8 +345,8 @@ module Vmpooler
337
345
  Thread.new do
338
346
  begin
339
347
  _destroy_vm(vm, pool, provider)
340
- rescue => err
341
- $logger.log('d', "[!] [#{pool}] '#{vm}' failed while destroying the VM with an error: #{err}")
348
+ rescue StandardError => e
349
+ $logger.log('d', "[!] [#{pool}] '#{vm}' failed while destroying the VM with an error: #{e}")
342
350
  raise
343
351
  end
344
352
  end
@@ -347,6 +355,7 @@ module Vmpooler
347
355
  def _destroy_vm(vm, pool, provider)
348
356
  mutex = vm_mutex(vm)
349
357
  return if mutex.locked?
358
+
350
359
  mutex.synchronize do
351
360
  $redis.hdel('vmpooler__active__' + pool, vm)
352
361
  $redis.hset('vmpooler__vm__' + vm, 'destroy', Time.now)
@@ -360,7 +369,7 @@ module Vmpooler
360
369
 
361
370
  $redis.srem('vmpooler__completed__' + pool, vm)
362
371
 
363
- finish = format('%.2f', Time.now - start)
372
+ finish = format('%<time>.2f', time: Time.now - start)
364
373
  $logger.log('s', "[-] [#{pool}] '#{vm}' destroyed in #{finish} seconds")
365
374
  $metrics.timing("destroy.#{pool}", finish)
366
375
  get_vm_usage_labels(vm)
@@ -370,11 +379,13 @@ module Vmpooler
370
379
 
371
380
  def get_vm_usage_labels(vm)
372
381
  return unless $config[:config]['usage_stats']
382
+
373
383
  checkout = $redis.hget("vmpooler__vm__#{vm}", 'checkout')
374
384
  return if checkout.nil?
385
+
375
386
  jenkins_build_url = $redis.hget("vmpooler__vm__#{vm}", 'tag:jenkins_build_url')
376
387
  user = $redis.hget("vmpooler__vm__#{vm}", 'token:user') || 'unauthenticated'
377
- poolname = $redis.hget("vmpooler__vm__#{vm}", "template")
388
+ poolname = $redis.hget("vmpooler__vm__#{vm}", 'template')
378
389
 
379
390
  unless jenkins_build_url
380
391
  user = user.gsub('.', '_')
@@ -404,25 +415,24 @@ module Vmpooler
404
415
  poolname
405
416
  ]
406
417
 
407
- metric_parts = metric_parts.reject { |s| s.nil? }
418
+ metric_parts = metric_parts.reject(&:nil?)
408
419
  metric_parts = metric_parts.map { |s| s.gsub('.', '_') }
409
420
 
410
421
  $metrics.increment(metric_parts.join('.'))
411
- rescue => err
412
- logger.log('d', "[!] [#{poolname}] failed while evaluating usage labels on '#{vm}' with an error: #{err}")
422
+ rescue StandardError => e
423
+ logger.log('d', "[!] [#{poolname}] failed while evaluating usage labels on '#{vm}' with an error: #{e}")
413
424
  end
414
425
 
415
426
  def component_to_test(match, labels_string)
416
427
  return if labels_string.nil?
428
+
417
429
  labels_string_parts = labels_string.split(',')
418
430
  labels_string_parts.each do |part|
419
431
  key, value = part.split('=')
420
432
  next if value.nil?
421
- if key == match
422
- return value
423
- end
433
+ return value if key == match
424
434
  end
425
- return
435
+ nil
426
436
  end
427
437
 
428
438
  def purge_unused_vms_and_folders
@@ -435,13 +445,13 @@ module Vmpooler
435
445
  Thread.new do
436
446
  begin
437
447
  purge_vms_and_folders($providers[provider.to_s])
438
- rescue => err
439
- $logger.log('s', "[!] failed while purging provider #{provider.to_s} VMs and folders with an error: #{err}")
448
+ rescue StandardError => e
449
+ $logger.log('s', "[!] failed while purging provider #{provider} VMs and folders with an error: #{e}")
440
450
  end
441
451
  end
442
452
  end
443
453
  end
444
- return
454
+ nil
445
455
  end
446
456
 
447
457
  # Return a list of pool folders
@@ -450,6 +460,7 @@ module Vmpooler
450
460
  folders = {}
451
461
  $config[:pools].each do |pool|
452
462
  next unless pool['provider'] == provider_name
463
+
453
464
  folder_parts = pool['folder'].split('/')
454
465
  datacenter = provider.get_target_datacenter_from_config(pool['name'])
455
466
  folders[folder_parts.pop] = "#{datacenter}/vm/#{folder_parts.join('/')}"
@@ -459,7 +470,7 @@ module Vmpooler
459
470
 
460
471
  def get_base_folders(folders)
461
472
  base = []
462
- folders.each do |key, value|
473
+ folders.each do |_key, value|
463
474
  base << value
464
475
  end
465
476
  base.uniq
@@ -476,8 +487,8 @@ module Vmpooler
476
487
  Thread.new do
477
488
  begin
478
489
  _create_vm_disk(pool_name, vm, disk_size, provider)
479
- rescue => err
480
- $logger.log('d', "[!] [#{pool_name}] '#{vm}' failed while creating disk: #{err}")
490
+ rescue StandardError => e
491
+ $logger.log('d', "[!] [#{pool_name}] '#{vm}' failed while creating disk: #{e}")
481
492
  raise
482
493
  end
483
494
  end
@@ -492,7 +503,7 @@ module Vmpooler
492
503
 
493
504
  result = provider.create_disk(pool_name, vm_name, disk_size.to_i)
494
505
 
495
- finish = format('%.2f', Time.now - start)
506
+ finish = format('%<time>.2f', time: Time.now - start)
496
507
 
497
508
  if result
498
509
  rdisks = $redis.hget('vmpooler__vm__' + vm_name, 'disk')
@@ -512,8 +523,8 @@ module Vmpooler
512
523
  Thread.new do
513
524
  begin
514
525
  _create_vm_snapshot(pool_name, vm, snapshot_name, provider)
515
- rescue => err
516
- $logger.log('d', "[!] [#{pool_name}] '#{vm}' failed while creating snapshot: #{err}")
526
+ rescue StandardError => e
527
+ $logger.log('d', "[!] [#{pool_name}] '#{vm}' failed while creating snapshot: #{e}")
517
528
  raise
518
529
  end
519
530
  end
@@ -525,7 +536,7 @@ module Vmpooler
525
536
 
526
537
  result = provider.create_snapshot(pool_name, vm_name, snapshot_name)
527
538
 
528
- finish = format('%.2f', Time.now - start)
539
+ finish = format('%<time>.2f', time: Time.now - start)
529
540
 
530
541
  if result
531
542
  $redis.hset('vmpooler__vm__' + vm_name, 'snapshot:' + snapshot_name, Time.now.to_s)
@@ -541,8 +552,8 @@ module Vmpooler
541
552
  Thread.new do
542
553
  begin
543
554
  _revert_vm_snapshot(pool_name, vm, snapshot_name, provider)
544
- rescue => err
545
- $logger.log('d', "[!] [#{pool_name}] '#{vm}' failed while reverting snapshot: #{err}")
555
+ rescue StandardError => e
556
+ $logger.log('d', "[!] [#{pool_name}] '#{vm}' failed while reverting snapshot: #{e}")
546
557
  raise
547
558
  end
548
559
  end
@@ -554,7 +565,7 @@ module Vmpooler
554
565
 
555
566
  result = provider.revert_snapshot(pool_name, vm_name, snapshot_name)
556
567
 
557
- finish = format('%.2f', Time.now - start)
568
+ finish = format('%<time>.2f', time: Time.now - start)
558
569
 
559
570
  if result
560
571
  $logger.log('s', "[+] [snapshot_manager] '#{vm_name}' reverted to snapshot '#{snapshot_name}' in #{finish} seconds")
@@ -574,14 +585,14 @@ module Vmpooler
574
585
  # ie. ["vsphere", "dummy"]
575
586
  def used_providers
576
587
  pools = config[:pools] || []
577
- @used_providers ||= (pools.map { |pool| pool[:provider] || pool['provider'] }.compact + default_providers ).uniq
588
+ @used_providers ||= (pools.map { |pool| pool[:provider] || pool['provider'] }.compact + default_providers).uniq
578
589
  end
579
590
 
580
591
  # @return [Array] - returns a list of providers that should always be loaded
581
592
  # note: vsphere is the default if user does not specify although this should not be
582
593
  # if vsphere is to no longer be loaded by default please remove
583
594
  def default_providers
584
- @default_providers ||= %w( vsphere dummy )
595
+ @default_providers ||= %w[vsphere dummy]
585
596
  end
586
597
 
587
598
  def get_pool_name_for_vm(vm_name)
@@ -592,8 +603,9 @@ module Vmpooler
592
603
  # @param pool_name [String] - the name of the pool
593
604
  # @return [Provider] - returns the provider class Object
594
605
  def get_provider_for_pool(pool_name)
595
- pool = $config[:pools].find { |pool| pool['name'] == pool_name }
606
+ pool = $config[:pools].find { |p| p['name'] == pool_name }
596
607
  return nil unless pool
608
+
597
609
  provider_name = pool.fetch('provider', nil)
598
610
  $providers[provider_name]
599
611
  end
@@ -607,8 +619,9 @@ module Vmpooler
607
619
  _check_disk_queue
608
620
  sleep(loop_delay)
609
621
 
610
- unless maxloop.zero?
622
+ unless maxloop == 0
611
623
  break if loop_count >= maxloop
624
+
612
625
  loop_count += 1
613
626
  end
614
627
  end
@@ -627,8 +640,8 @@ module Vmpooler
627
640
  raise("Missing Provider for vm #{vm_name} in pool #{pool_name}") if provider.nil?
628
641
 
629
642
  create_vm_disk(pool_name, vm_name, disk_size, provider)
630
- rescue => err
631
- $logger.log('s', "[!] [disk_manager] disk creation appears to have failed: #{err}")
643
+ rescue StandardError => e
644
+ $logger.log('s', "[!] [disk_manager] disk creation appears to have failed: #{e}")
632
645
  end
633
646
  end
634
647
  end
@@ -642,8 +655,9 @@ module Vmpooler
642
655
  _check_snapshot_queue
643
656
  sleep(loop_delay)
644
657
 
645
- unless maxloop.zero?
658
+ unless maxloop == 0
646
659
  break if loop_count >= maxloop
660
+
647
661
  loop_count += 1
648
662
  end
649
663
  end
@@ -663,8 +677,8 @@ module Vmpooler
663
677
  raise("Missing Provider for vm #{vm_name} in pool #{pool_name}") if provider.nil?
664
678
 
665
679
  create_vm_snapshot(pool_name, vm_name, snapshot_name, provider)
666
- rescue => err
667
- $logger.log('s', "[!] [snapshot_manager] snapshot create appears to have failed: #{err}")
680
+ rescue StandardError => e
681
+ $logger.log('s', "[!] [snapshot_manager] snapshot create appears to have failed: #{e}")
668
682
  end
669
683
  end
670
684
 
@@ -680,8 +694,8 @@ module Vmpooler
680
694
  raise("Missing Provider for vm #{vm_name} in pool #{pool_name}") if provider.nil?
681
695
 
682
696
  revert_vm_snapshot(pool_name, vm_name, snapshot_name, provider)
683
- rescue => err
684
- $logger.log('s', "[!] [snapshot_manager] snapshot revert appears to have failed: #{err}")
697
+ rescue StandardError => e
698
+ $logger.log('s', "[!] [snapshot_manager] snapshot revert appears to have failed: #{e}")
685
699
  end
686
700
  end
687
701
  end
@@ -694,8 +708,8 @@ module Vmpooler
694
708
  $redis.srem("vmpooler__migrating__#{pool_name}", vm_name)
695
709
  provider.migrate_vm(pool_name, vm_name)
696
710
  end
697
- rescue => err
698
- $logger.log('s', "[x] [#{pool_name}] '#{vm_name}' migration failed with an error: #{err}")
711
+ rescue StandardError => e
712
+ $logger.log('s', "[x] [#{pool_name}] '#{vm_name}' migration failed with an error: #{e}")
699
713
  end
700
714
  end
701
715
  end
@@ -724,17 +738,11 @@ module Vmpooler
724
738
  wakeup_by = Time.now + wakeup_period
725
739
  return if time_passed?(:exit_by, exit_by)
726
740
 
727
- if options[:pool_size_change]
728
- initial_ready_size = $redis.scard("vmpooler__ready__#{options[:poolname]}")
729
- end
741
+ initial_ready_size = $redis.scard("vmpooler__ready__#{options[:poolname]}") if options[:pool_size_change]
730
742
 
731
- if options[:clone_target_change]
732
- initial_clone_target = $redis.hget("vmpooler__pool__#{options[:poolname]}", options[:clone_target])
733
- end
743
+ initial_clone_target = $redis.hget("vmpooler__pool__#{options[:poolname]}", options[:clone_target]) if options[:clone_target_change]
734
744
 
735
- if options[:pool_template_change]
736
- initial_template = $redis.hget('vmpooler__template__prepared', options[:poolname])
737
- end
745
+ initial_template = $redis.hget('vmpooler__template__prepared', options[:poolname]) if options[:pool_template_change]
738
746
 
739
747
  loop do
740
748
  sleep(1)
@@ -751,7 +759,7 @@ module Vmpooler
751
759
  end
752
760
 
753
761
  if options[:clone_target_change]
754
- clone_target = $redis.hget("vmpooler__config__clone_target}", options[:poolname])
762
+ clone_target = $redis.hget('vmpooler__config__clone_target}', options[:poolname])
755
763
  if clone_target
756
764
  break unless clone_target == initial_clone_target
757
765
  end
@@ -795,6 +803,7 @@ module Vmpooler
795
803
  loop_delay = loop_delay_min
796
804
  provider = get_provider_for_pool(pool['name'])
797
805
  raise("Could not find provider '#{pool['provider']}") if provider.nil?
806
+
798
807
  sync_pool_template(pool)
799
808
  loop do
800
809
  result = _check_pool(pool, provider)
@@ -807,13 +816,14 @@ module Vmpooler
807
816
  end
808
817
  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)
809
818
 
810
- unless maxloop.zero?
819
+ unless maxloop == 0
811
820
  break if loop_count >= maxloop
821
+
812
822
  loop_count += 1
813
823
  end
814
824
  end
815
- rescue => err
816
- $logger.log('s', "[!] [#{pool['name']}] Error while checking the pool: #{err}")
825
+ rescue StandardError => e
826
+ $logger.log('s', "[!] [#{pool['name']}] Error while checking the pool: #{e}")
817
827
  raise
818
828
  end
819
829
  end
@@ -828,19 +838,13 @@ module Vmpooler
828
838
  end
829
839
 
830
840
  def dereference_mutex(vmname)
831
- if @vm_mutex.delete(vmname)
832
- return true
833
- else
834
- return
835
- end
841
+ true if @vm_mutex.delete(vmname)
836
842
  end
837
843
 
838
844
  def sync_pool_template(pool)
839
845
  pool_template = $redis.hget('vmpooler__config__template', pool['name'])
840
846
  if pool_template
841
- unless pool['template'] == pool_template
842
- pool['template'] = pool_template
843
- end
847
+ pool['template'] = pool_template unless pool['template'] == pool_template
844
848
  end
845
849
  end
846
850
 
@@ -850,8 +854,8 @@ module Vmpooler
850
854
  begin
851
855
  provider.create_template_delta_disks(pool)
852
856
  $redis.sadd('vmpooler__template__deltas', pool['template'])
853
- rescue => err
854
- $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: #{err}")
857
+ rescue StandardError => e
858
+ $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}")
855
859
  end
856
860
  end
857
861
  end
@@ -863,6 +867,7 @@ module Vmpooler
863
867
  prepared_template = $redis.hget('vmpooler__template__prepared', pool['name'])
864
868
  configured_template = $redis.hget('vmpooler__config__template', pool['name'])
865
869
  return if mutex.locked?
870
+
866
871
  if prepared_template.nil?
867
872
  mutex.synchronize do
868
873
  prepare_template(pool, provider)
@@ -878,6 +883,7 @@ module Vmpooler
878
883
  end
879
884
  return if configured_template.nil?
880
885
  return if configured_template == prepared_template
886
+
881
887
  mutex.synchronize do
882
888
  update_pool_template(pool, provider, configured_template, prepared_template)
883
889
  end
@@ -913,9 +919,11 @@ module Vmpooler
913
919
  def update_clone_target(pool)
914
920
  mutex = pool_mutex(pool['name'])
915
921
  return if mutex.locked?
922
+
916
923
  clone_target = $redis.hget('vmpooler__config__clone_target', pool['name'])
917
924
  return if clone_target.nil?
918
925
  return if clone_target == pool['clone_target']
926
+
919
927
  $logger.log('s', "[*] [#{pool['name']}] clone updated from #{pool['clone_target']} to #{clone_target}")
920
928
  mutex.synchronize do
921
929
  pool['clone_target'] = clone_target
@@ -930,9 +938,11 @@ module Vmpooler
930
938
  total = $redis.scard("vmpooler__pending__#{pool['name']}") + ready
931
939
  return if total.nil?
932
940
  return if total == 0
941
+
933
942
  mutex = pool_mutex(pool['name'])
934
943
  return if mutex.locked?
935
944
  return unless ready > pool['size']
945
+
936
946
  mutex.synchronize do
937
947
  difference = ready - pool['size']
938
948
  difference.times do
@@ -950,10 +960,13 @@ module Vmpooler
950
960
  def update_pool_size(pool)
951
961
  mutex = pool_mutex(pool['name'])
952
962
  return if mutex.locked?
963
+
953
964
  poolsize = $redis.hget('vmpooler__config__poolsize', pool['name'])
954
965
  return if poolsize.nil?
966
+
955
967
  poolsize = Integer(poolsize)
956
968
  return if poolsize == pool['size']
969
+
957
970
  mutex.synchronize do
958
971
  pool['size'] = poolsize
959
972
  end
@@ -962,6 +975,7 @@ module Vmpooler
962
975
  def reset_pool(pool)
963
976
  poolname = pool['name']
964
977
  return unless $redis.sismember('vmpooler__poolreset', poolname)
978
+
965
979
  $redis.srem('vmpooler__poolreset', poolname)
966
980
  mutex = pool_mutex(poolname)
967
981
  mutex.synchronize do
@@ -992,9 +1006,9 @@ module Vmpooler
992
1006
  inventory[vm['name']] = 1
993
1007
  end
994
1008
  end
995
- rescue => err
996
- $logger.log('s', "[!] [#{pool['name']}] _check_pool failed with an error while running create_inventory: #{err}")
997
- raise(err)
1009
+ rescue StandardError => e
1010
+ $logger.log('s', "[!] [#{pool['name']}] _check_pool failed with an error while running create_inventory: #{e}")
1011
+ raise(e)
998
1012
  end
999
1013
  inventory
1000
1014
  end
@@ -1006,8 +1020,8 @@ module Vmpooler
1006
1020
  vm_lifetime = $redis.hget('vmpooler__vm__' + vm, 'lifetime') || $config[:config]['vm_lifetime'] || 12
1007
1021
  pool_check_response[:checked_running_vms] += 1
1008
1022
  check_running_vm(vm, pool_name, vm_lifetime, provider)
1009
- rescue => err
1010
- $logger.log('d', "[!] [#{pool_name}] _check_pool with an error while evaluating running VMs: #{err}")
1023
+ rescue StandardError => e
1024
+ $logger.log('d', "[!] [#{pool_name}] _check_pool with an error while evaluating running VMs: #{e}")
1011
1025
  end
1012
1026
  else
1013
1027
  move_vm_queue(pool_name, vm, 'running', 'completed', 'is a running VM but is missing from inventory. Marking as completed.')
@@ -1021,8 +1035,8 @@ module Vmpooler
1021
1035
  begin
1022
1036
  pool_check_response[:checked_ready_vms] += 1
1023
1037
  check_ready_vm(vm, pool_name, pool_ttl || 0, provider)
1024
- rescue => err
1025
- $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating ready VMs: #{err}")
1038
+ rescue StandardError => e
1039
+ $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating ready VMs: #{e}")
1026
1040
  end
1027
1041
  else
1028
1042
  move_vm_queue(pool_name, vm, 'ready', 'completed', 'is a ready VM but is missing from inventory. Marking as completed.')
@@ -1037,8 +1051,8 @@ module Vmpooler
1037
1051
  begin
1038
1052
  pool_check_response[:checked_pending_vms] += 1
1039
1053
  check_pending_vm(vm, pool_name, pool_timeout, provider)
1040
- rescue => err
1041
- $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating pending VMs: #{err}")
1054
+ rescue StandardError => e
1055
+ $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating pending VMs: #{e}")
1042
1056
  end
1043
1057
  else
1044
1058
  fail_pending_vm(vm, pool_name, pool_timeout, false)
@@ -1052,11 +1066,11 @@ module Vmpooler
1052
1066
  begin
1053
1067
  pool_check_response[:destroyed_vms] += 1
1054
1068
  destroy_vm(vm, pool_name, provider)
1055
- rescue => err
1069
+ rescue StandardError => e
1056
1070
  $redis.srem("vmpooler__completed__#{pool_name}", vm)
1057
1071
  $redis.hdel("vmpooler__active__#{pool_name}", vm)
1058
1072
  $redis.del("vmpooler__vm__#{vm}")
1059
- $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating completed VMs: #{err}")
1073
+ $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating completed VMs: #{e}")
1060
1074
  end
1061
1075
  else
1062
1076
  $logger.log('s', "[!] [#{pool_name}] '#{vm}' not found in inventory, removed from 'completed' queue")
@@ -1068,22 +1082,18 @@ module Vmpooler
1068
1082
  end
1069
1083
 
1070
1084
  def check_discovered_pool_vms(pool_name)
1071
- begin
1072
- $redis.smembers("vmpooler__discovered__#{pool_name}").reverse.each do |vm|
1073
- %w[pending ready running completed].each do |queue|
1074
- if $redis.sismember("vmpooler__#{queue}__#{pool_name}", vm)
1075
- $logger.log('d', "[!] [#{pool_name}] '#{vm}' found in '#{queue}', removed from 'discovered' queue")
1076
- $redis.srem("vmpooler__discovered__#{pool_name}", vm)
1077
- end
1078
- end
1079
-
1080
- if $redis.sismember("vmpooler__discovered__#{pool_name}", vm)
1081
- $redis.smove("vmpooler__discovered__#{pool_name}", "vmpooler__completed__#{pool_name}", vm)
1085
+ $redis.smembers("vmpooler__discovered__#{pool_name}").reverse.each do |vm|
1086
+ %w[pending ready running completed].each do |queue|
1087
+ if $redis.sismember("vmpooler__#{queue}__#{pool_name}", vm)
1088
+ $logger.log('d', "[!] [#{pool_name}] '#{vm}' found in '#{queue}', removed from 'discovered' queue")
1089
+ $redis.srem("vmpooler__discovered__#{pool_name}", vm)
1082
1090
  end
1083
1091
  end
1084
- rescue => err
1085
- $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating discovered VMs: #{err}")
1092
+
1093
+ $redis.smove("vmpooler__discovered__#{pool_name}", "vmpooler__completed__#{pool_name}", vm) if $redis.sismember("vmpooler__discovered__#{pool_name}", vm)
1086
1094
  end
1095
+ rescue StandardError => e
1096
+ $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating discovered VMs: #{e}")
1087
1097
  end
1088
1098
 
1089
1099
  def check_migrating_pool_vms(pool_name, provider, pool_check_response, inventory)
@@ -1092,8 +1102,8 @@ module Vmpooler
1092
1102
  begin
1093
1103
  pool_check_response[:migrated_vms] += 1
1094
1104
  migrate_vm(vm, pool_name, provider)
1095
- rescue => err
1096
- $logger.log('s', "[x] [#{pool_name}] '#{vm}' failed to migrate: #{err}")
1105
+ rescue StandardError => e
1106
+ $logger.log('s', "[x] [#{pool_name}] '#{vm}' failed to migrate: #{e}")
1097
1107
  end
1098
1108
  end
1099
1109
  end
@@ -1101,6 +1111,7 @@ module Vmpooler
1101
1111
 
1102
1112
  def repopulate_pool_vms(pool_name, provider, pool_check_response, pool_size)
1103
1113
  return if pool_mutex(pool_name).locked?
1114
+
1104
1115
  ready = $redis.scard("vmpooler__ready__#{pool_name}")
1105
1116
  total = $redis.scard("vmpooler__pending__#{pool_name}") + ready
1106
1117
 
@@ -1108,8 +1119,8 @@ module Vmpooler
1108
1119
  $metrics.gauge("running.#{pool_name}", $redis.scard("vmpooler__running__#{pool_name}"))
1109
1120
 
1110
1121
  if $redis.get("vmpooler__empty__#{pool_name}")
1111
- $redis.del("vmpooler__empty__#{pool_name}") unless ready.zero?
1112
- elsif ready.zero?
1122
+ $redis.del("vmpooler__empty__#{pool_name}") unless ready == 0
1123
+ elsif ready == 0
1113
1124
  $redis.set("vmpooler__empty__#{pool_name}", 'true')
1114
1125
  $logger.log('s', "[!] [#{pool_name}] is empty")
1115
1126
  end
@@ -1120,8 +1131,8 @@ module Vmpooler
1120
1131
  $redis.incr('vmpooler__tasks__clone')
1121
1132
  pool_check_response[:cloned_vms] += 1
1122
1133
  clone_vm(pool_name, provider)
1123
- rescue => err
1124
- $logger.log('s', "[!] [#{pool_name}] clone failed during check_pool with an error: #{err}")
1134
+ rescue StandardError => e
1135
+ $logger.log('s', "[!] [#{pool_name}] clone failed during check_pool with an error: #{e}")
1125
1136
  $redis.decr('vmpooler__tasks__clone')
1126
1137
  raise
1127
1138
  end
@@ -1142,7 +1153,7 @@ module Vmpooler
1142
1153
 
1143
1154
  begin
1144
1155
  inventory = create_inventory(pool, provider, pool_check_response)
1145
- rescue => err
1156
+ rescue StandardError
1146
1157
  return(pool_check_response)
1147
1158
  end
1148
1159
 
@@ -1195,6 +1206,7 @@ module Vmpooler
1195
1206
  provider_klass = Vmpooler::PoolManager::Provider
1196
1207
  provider_klass.constants.each do |classname|
1197
1208
  next unless classname.to_s.casecmp(provider_class) == 0
1209
+
1198
1210
  return provider_klass.const_get(classname).new(config, logger, metrics, provider_name, options)
1199
1211
  end
1200
1212
  raise("Provider '#{provider_class}' is unknown for pool with provider name '#{provider_name}'") if provider.nil?
@@ -1257,8 +1269,8 @@ module Vmpooler
1257
1269
  end
1258
1270
  begin
1259
1271
  $providers[provider_name] = create_provider_object($config, $logger, $metrics, provider_class, provider_name, {}) if $providers[provider_name].nil?
1260
- rescue => err
1261
- $logger.log('s', "Error while creating provider for pool #{pool['name']}: #{err}")
1272
+ rescue StandardError => e
1273
+ $logger.log('s', "Error while creating provider for pool #{pool['name']}: #{e}")
1262
1274
  raise
1263
1275
  end
1264
1276
  end
@@ -1292,8 +1304,9 @@ module Vmpooler
1292
1304
 
1293
1305
  sleep(loop_delay)
1294
1306
 
1295
- unless maxloop.zero?
1307
+ unless maxloop == 0
1296
1308
  break if loop_count >= maxloop
1309
+
1297
1310
  loop_count += 1
1298
1311
  end
1299
1312
  end