mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
Implement clone rate-limiting
This commit is contained in:
parent
36cc7ea3fe
commit
f4caa5a3ad
1 changed files with 24 additions and 16 deletions
|
|
@ -14,20 +14,23 @@ Dir.chdir(File.dirname(__FILE__))
|
||||||
|
|
||||||
# Load the configuration file
|
# Load the configuration file
|
||||||
config_file = File.expand_path('vmware-host-pooler.yaml')
|
config_file = File.expand_path('vmware-host-pooler.yaml')
|
||||||
config = YAML.load_file(config_file)
|
$config = YAML.load_file(config_file)
|
||||||
|
|
||||||
pools = config[:pools]
|
pools = $config[:pools]
|
||||||
vsphere = config[:vsphere]
|
vsphere = $config[:vsphere]
|
||||||
|
|
||||||
# Load logger library
|
# Load logger library
|
||||||
$logger = Logger.new config[:config]['logfile']
|
$logger = Logger.new $config[:config]['logfile']
|
||||||
|
|
||||||
# Load Graphite helper library (if configured)
|
# Load Graphite helper library (if configured)
|
||||||
if (defined? config[:config]['graphite'])
|
if (defined? $config[:config]['graphite'])
|
||||||
require 'lib/graphite'
|
require 'lib/graphite'
|
||||||
$graphite = Graphite.new config[:config]['graphite']
|
$graphite = Graphite.new $config[:config]['graphite']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Set some defaults
|
||||||
|
$config[:config]['task_limit'] ||= 10
|
||||||
|
|
||||||
# Connect to Redis
|
# Connect to Redis
|
||||||
$redis = Redis.new
|
$redis = Redis.new
|
||||||
|
|
||||||
|
|
@ -187,6 +190,8 @@ def clone_vm template, pool, folder, datastore
|
||||||
|
|
||||||
$logger.log('s', "[+] [#{vm['template']}] '#{vm['hostname']}' cloned from '#{vm['template']}' in #{finish} seconds")
|
$logger.log('s', "[+] [#{vm['template']}] '#{vm['hostname']}' cloned from '#{vm['template']}' in #{finish} seconds")
|
||||||
|
|
||||||
|
$redis.decr('vmware_host_pool__tasks__clone')
|
||||||
|
|
||||||
begin
|
begin
|
||||||
$graphite.log("vcloud.clone.#{vm['template']}", finish) if defined? $graphite
|
$graphite.log("vcloud.clone.#{vm['template']}", finish) if defined? $graphite
|
||||||
rescue
|
rescue
|
||||||
|
|
@ -227,8 +232,6 @@ end
|
||||||
def check_pool pool
|
def check_pool pool
|
||||||
$logger.log('d', "[*] [#{pool['name']}] starting worker thread")
|
$logger.log('d', "[*] [#{pool['name']}] starting worker thread")
|
||||||
|
|
||||||
$redis.del('vmware_host_pool__pending__'+pool['name'])
|
|
||||||
|
|
||||||
$threads[pool['name']] = Thread.new {
|
$threads[pool['name']] = Thread.new {
|
||||||
$vsphere[pool['name']] ||= VsphereHelper.new
|
$vsphere[pool['name']] ||= VsphereHelper.new
|
||||||
|
|
||||||
|
|
@ -332,14 +335,19 @@ def check_pool pool
|
||||||
|
|
||||||
if (total < pool['size'])
|
if (total < pool['size'])
|
||||||
(1..(pool['size'] - total)).each { |i|
|
(1..(pool['size'] - total)).each { |i|
|
||||||
begin
|
|
||||||
clone_vm(
|
if ($redis.get('vmware_host_pool__tasks__clone').to_i < $config[:config]['task_limit'])
|
||||||
pool['template'],
|
begin
|
||||||
pool['pool'],
|
$redis.incr('vmware_host_pool__tasks__clone')
|
||||||
pool['folder'],
|
|
||||||
pool['datastore']
|
clone_vm(
|
||||||
)
|
pool['template'],
|
||||||
rescue
|
pool['pool'],
|
||||||
|
pool['folder'],
|
||||||
|
pool['datastore']
|
||||||
|
)
|
||||||
|
rescue
|
||||||
|
end
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue