mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 18:08:42 -05:00
(POOLER-143) Add clone_target config change to API
This allows the user to change the cluster in which the targeted pool will clone to. Upon configuration change, the thread will wake up and execute the change within 1 second.
This commit is contained in:
parent
5bbaf7e8cf
commit
98a547b807
4 changed files with 222 additions and 3 deletions
|
|
@ -194,6 +194,26 @@ module Vmpooler
|
|||
result
|
||||
end
|
||||
|
||||
def update_clone_target(payload)
|
||||
result = { 'ok' => false }
|
||||
|
||||
pool_index = pool_index(pools)
|
||||
pools_updated = 0
|
||||
sync_clone_targets
|
||||
|
||||
payload.each do |poolname, clone_target|
|
||||
unless pools[pool_index[poolname]]['clone_target'] == clone_target
|
||||
pools[pool_index[poolname]]['clone_target'] == clone_target
|
||||
backend.hset('vmpooler__config__clone_target', poolname, clone_target)
|
||||
pools_updated += 1
|
||||
status 201
|
||||
end
|
||||
end
|
||||
status 200 unless pools_updated > 0
|
||||
result['ok'] = true
|
||||
result
|
||||
end
|
||||
|
||||
def sync_pool_templates
|
||||
pool_index = pool_index(pools)
|
||||
template_configs = backend.hgetall('vmpooler__config__template')
|
||||
|
|
@ -222,6 +242,20 @@ module Vmpooler
|
|||
end
|
||||
end
|
||||
|
||||
def sync_clone_targets
|
||||
pool_index = pool_index(pools)
|
||||
clone_target_configs = backend.hgetall('vmpooler__config__clone_target')
|
||||
unless clone_target_configs.nil?
|
||||
clone_target_configs.each do |poolname, clone_target|
|
||||
if pool_index.include? poolname
|
||||
unless pools[pool_index[poolname]]['clone_target'] == clone_target
|
||||
pools[pool_index[poolname]]['clone_target'] == clone_target
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
get '/' do
|
||||
sync_pool_sizes
|
||||
redirect to('/dashboard/')
|
||||
|
|
@ -700,6 +734,14 @@ module Vmpooler
|
|||
invalid
|
||||
end
|
||||
|
||||
def invalid_pool(payload)
|
||||
invalid = []
|
||||
payload.each do |pool, clone_target|
|
||||
invalid << pool unless pool_exists?(pool)
|
||||
end
|
||||
invalid
|
||||
end
|
||||
|
||||
post "#{api_prefix}/vm/:template/?" do
|
||||
content_type :json
|
||||
result = { 'ok' => false }
|
||||
|
|
@ -1011,6 +1053,37 @@ module Vmpooler
|
|||
JSON.pretty_generate(result)
|
||||
end
|
||||
|
||||
post "#{api_prefix}/config/clonetarget/?" do
|
||||
content_type :json
|
||||
result = { 'ok' => false }
|
||||
|
||||
if config['experimental_features']
|
||||
need_token! if Vmpooler::API.settings.config[:auth]
|
||||
|
||||
payload = JSON.parse(request.body.read)
|
||||
|
||||
if payload
|
||||
invalid = invalid_pool(payload)
|
||||
if invalid.empty?
|
||||
result = update_clone_target(payload)
|
||||
else
|
||||
invalid.each do |bad_template|
|
||||
metrics.increment("config.invalid.#{bad_template}")
|
||||
end
|
||||
result[:bad_templates] = invalid
|
||||
status 400
|
||||
end
|
||||
else
|
||||
metrics.increment('config.invalid.unknown')
|
||||
status 404
|
||||
end
|
||||
else
|
||||
status 405
|
||||
end
|
||||
|
||||
JSON.pretty_generate(result)
|
||||
end
|
||||
|
||||
get "#{api_prefix}/config/?" do
|
||||
content_type :json
|
||||
result = { 'ok' => false }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue