vmpooler 0.7.1 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4940c5033dca65a8f33211c244ff5cdd84e4635
4
- data.tar.gz: f5703c6f878c4173f56f83d6933ea5350cd5bc90
3
+ metadata.gz: 18126b74e4adebbee73caa9f3e676c02b90cb309
4
+ data.tar.gz: c39e9a2391865688b5acb66e191145c63fae9ab6
5
5
  SHA512:
6
- metadata.gz: f1a1163e7922cc703d1e2621e612cdda05a50b95c63d4b7893b5e418371b7ac5c142b39ee6b3e5e10d20235262fbb0a906e30c63547cb148087f9d77af8b11f2
7
- data.tar.gz: fe6d94b28686ef8e5436ec7efc772525b16dcfe45c49a78dce2f8ce0bc19f92b88d39735c0c898aaae351a0386e38f2f93512c43ce2a15e50b6c821217d96c29
6
+ metadata.gz: a580a1eb9e085541434f5711879d9a99a17bab90bf8680789dde160940b0f36e2d6308cfab211cb39e76ac217da7825e356b6d727eedf8f1d2867e8edc6c623a
7
+ data.tar.gz: 39b7bfa786001efad19a7a48cc73536ea7e941eee006e8f15a959f4e551267532211d6a49e7cb42b10f8f0720621d2282c4fd40c4a386eca2befee4814e61ba5
@@ -36,6 +36,10 @@ module Vmpooler
36
36
  validate_token(backend)
37
37
  end
38
38
 
39
+ def checkoutlock
40
+ Vmpooler::API::settings.checkoutlock
41
+ end
42
+
39
43
  def fetch_single_vm(template)
40
44
  template_backends = [template]
41
45
  aliases = Vmpooler::API.settings.config[:alias]
@@ -67,21 +71,23 @@ module Vmpooler
67
71
  end
68
72
  end
69
73
 
70
- template_backends.each do |template_backend|
71
- vms = backend.smembers("vmpooler__ready__#{template_backend}")
72
- next if vms.empty?
73
- vms.reverse.each do |vm|
74
- ready = vm_ready?(vm, config['domain'])
75
- if ready
76
- backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__running__#{template_backend}", vm)
77
- return [vm, template_backend, template]
78
- else
79
- backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__completed__#{template_backend}", vm)
80
- metrics.increment("checkout.nonresponsive.#{template_backend}")
74
+ checkoutlock.synchronize do
75
+ template_backends.each do |template_backend|
76
+ vms = backend.smembers("vmpooler__ready__#{template_backend}")
77
+ next if vms.empty?
78
+ vms.reverse.each do |vm|
79
+ ready = vm_ready?(vm, config['domain'])
80
+ if ready
81
+ backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__running__#{template_backend}", vm)
82
+ return [vm, template_backend, template]
83
+ else
84
+ backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__completed__#{template_backend}", vm)
85
+ metrics.increment("checkout.nonresponsive.#{template_backend}")
86
+ end
81
87
  end
82
88
  end
89
+ [nil, nil, nil]
83
90
  end
84
- [nil, nil, nil]
85
91
  end
86
92
 
87
93
  def return_vm_to_ready_state(template, vm)
data/lib/vmpooler/api.rb CHANGED
@@ -40,6 +40,7 @@ module Vmpooler
40
40
  self.settings.set :config, config
41
41
  self.settings.set :redis, redis
42
42
  self.settings.set :metrics, metrics
43
+ self.settings.set :checkoutlock, Mutex.new
43
44
  end
44
45
 
45
46
  def execute!
@@ -156,8 +156,14 @@ module Vmpooler
156
156
  $redis.hset('vmpooler__vm__' + vm, 'check', Time.now)
157
157
  # Check if the hosts TTL has expired
158
158
  if ttl > 0
159
- # host['boottime'] may be nil if host is not powered on
160
- if ((Time.now - host['boottime']) / 60).to_s[/^\d+\.\d{1}/].to_f > ttl
159
+ # if 'boottime' is nil, set bootime to beginning of unix epoch, forces TTL to be assumed expired
160
+ boottime = $redis.hget("vmpooler__vm__#{vm}", 'ready')
161
+ if boottime
162
+ boottime = Time.parse(boottime)
163
+ else
164
+ boottime = Time.at(0)
165
+ end
166
+ if ((Time.now - boottime) / 60).to_s[/^\d+\.\d{1}/].to_f > ttl
161
167
  $redis.smove('vmpooler__ready__' + pool_name, 'vmpooler__completed__' + pool_name, vm)
162
168
 
163
169
  $logger.log('d', "[!] [#{pool_name}] '#{vm}' reached end of TTL after #{ttl} minutes, removed from 'ready' queue")
@@ -1,3 +1,3 @@
1
1
  module Vmpooler
2
- VERSION = '0.7.1'.freeze
2
+ VERSION = '0.7.2'.freeze
3
3
  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: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-26 00:00:00.000000000 Z
11
+ date: 2019-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pickup