diff --git a/lib/vmpooler/api/v1.rb b/lib/vmpooler/api/v1.rb index d10bdc4..0540b65 100644 --- a/lib/vmpooler/api/v1.rb +++ b/lib/vmpooler/api/v1.rb @@ -544,6 +544,9 @@ module Vmpooler arg.keys.each do |tag| backend.hset('vmpooler__vm__' + params[:hostname], 'tag:' + tag, arg[tag]) backend.hset('vmpooler__tag__' + Date.today.to_s, params[:hostname] + ':' + tag, arg[tag]) + + # Auto-expire summary index + backend.expire('vmpooler__tag__' + Date.today.to_s, (Vmpooler::API.settings.config[:redis]['data_ttl'].to_i * 60 * 60)) end end end diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index 7cb702b..413df11 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -66,6 +66,9 @@ module Vmpooler $redis.smove('vmpooler__pending__' + pool, 'vmpooler__ready__' + pool, vm) $redis.hset('vmpooler__boot__' + Date.today.to_s, pool + ':' + vm, finish) + # Auto-expire summary index + $redis.expire('vmpooler__boot__' + Date.today.to_s, ($config[:redis]['data_ttl'].to_i * 60 * 60)) + $logger.log('s', "[>] [#{pool}] '#{vm}' moved to 'ready' queue") end end @@ -236,6 +239,9 @@ module Vmpooler $redis.hset('vmpooler__clone__' + Date.today.to_s, vm['template'] + ':' + vm['hostname'], finish) $redis.hset('vmpooler__vm__' + vm['hostname'], 'clone_time', finish) + # Auto-expire summary index + $redis.expire('vmpooler__clone__' + Date.today.to_s, ($config[:redis]['data_ttl'].to_i * 60 * 60)) + $logger.log('s', "[+] [#{vm['template']}] '#{vm['hostname']}' cloned from '#{vm['template']}' in #{finish} seconds") rescue $logger.log('s', "[!] [#{vm['template']}] '#{vm['hostname']}' clone appears to have failed") diff --git a/spec/vmpooler/api/v1_spec.rb b/spec/vmpooler/api/v1_spec.rb index 687c865..2a4ea29 100644 --- a/spec/vmpooler/api/v1_spec.rb +++ b/spec/vmpooler/api/v1_spec.rb @@ -302,7 +302,10 @@ describe Vmpooler::API::V1 do pools: [ {'name' => 'pool1', 'size' => 5}, {'name' => 'pool2', 'size' => 10} - ] + ], + redis: { + 'data_ttl' => '168' + } } } before do @@ -310,6 +313,7 @@ describe Vmpooler::API::V1 do app.settings.set :redis, redis allow(redis).to receive(:exists).and_return '1' + allow(redis).to receive(:expire).with('vmpooler__tag__' + Date.today.to_s, 604800).and_return '1' allow(redis).to receive(:hset).and_return '1' end diff --git a/spec/vmpooler/pool_manager_spec.rb b/spec/vmpooler/pool_manager_spec.rb index d94d3b3..df1ac5e 100644 --- a/spec/vmpooler/pool_manager_spec.rb +++ b/spec/vmpooler/pool_manager_spec.rb @@ -82,11 +82,17 @@ describe 'Pool Manager' do end context 'a host with proper summary' do + let(:config) { { + redis: { 'data_ttl' => '168' } + } } + + before do allow(host).to receive(:summary).and_return true allow(host).to receive_message_chain(:summary, :guest).and_return true allow(host).to receive_message_chain(:summary, :guest, :hostName).and_return vm + allow(redis).to receive(:expire).with('vmpooler__boot__' + Date.today.to_s, 604800).and_return '1' allow(redis).to receive(:hget) allow(redis).to receive(:smove) allow(redis).to receive(:hset)