mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
Merge pull request #389 from mattkirby/fix_purge
Fix vmpooler folder purging
This commit is contained in:
commit
662fdf2851
2 changed files with 44 additions and 29 deletions
|
|
@ -539,15 +539,14 @@ module Vmpooler
|
||||||
def purge_unused_vms_and_folders
|
def purge_unused_vms_and_folders
|
||||||
global_purge = $config[:config]['purge_unconfigured_folders']
|
global_purge = $config[:config]['purge_unconfigured_folders']
|
||||||
providers = $config[:providers].keys
|
providers = $config[:providers].keys
|
||||||
providers.each do |provider|
|
providers.each do |provider_key|
|
||||||
provider_purge = $config[:providers][provider]['purge_unconfigured_folders']
|
provider_purge = $config[:providers][provider_key]['purge_unconfigured_folders'] || global_purge
|
||||||
provider_purge = global_purge if provider_purge.nil?
|
|
||||||
if provider_purge
|
if provider_purge
|
||||||
Thread.new do
|
Thread.new do
|
||||||
begin
|
begin
|
||||||
purge_vms_and_folders($providers[provider.to_s])
|
purge_vms_and_folders(provider_key)
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
$logger.log('s', "[!] failed while purging provider #{provider} VMs and folders with an error: #{e}")
|
$logger.log('s', "[!] failed while purging provider #{provider_key} VMs and folders with an error: #{e}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -556,14 +555,13 @@ module Vmpooler
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return a list of pool folders
|
# Return a list of pool folders
|
||||||
def pool_folders(provider)
|
def pool_folders(provider_name)
|
||||||
provider_name = provider.name
|
|
||||||
folders = {}
|
folders = {}
|
||||||
$config[:pools].each do |pool|
|
$config[:pools].each do |pool|
|
||||||
next unless pool['provider'] == provider_name
|
next unless pool['provider'] == provider_name.to_s
|
||||||
|
|
||||||
folder_parts = pool['folder'].split('/')
|
folder_parts = pool['folder'].split('/')
|
||||||
datacenter = provider.get_target_datacenter_from_config(pool['name'])
|
datacenter = $providers[provider_name.to_s].get_target_datacenter_from_config(pool['name'])
|
||||||
folders[folder_parts.pop] = "#{datacenter}/vm/#{folder_parts.join('/')}"
|
folders[folder_parts.pop] = "#{datacenter}/vm/#{folder_parts.join('/')}"
|
||||||
end
|
end
|
||||||
folders
|
folders
|
||||||
|
|
@ -577,8 +575,9 @@ module Vmpooler
|
||||||
base.uniq
|
base.uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
def purge_vms_and_folders(provider)
|
def purge_vms_and_folders(provider_name)
|
||||||
configured_folders = pool_folders(provider)
|
provider = $providers[provider_name.to_s]
|
||||||
|
configured_folders = pool_folders(provider_name)
|
||||||
base_folders = get_base_folders(configured_folders)
|
base_folders = get_base_folders(configured_folders)
|
||||||
whitelist = provider.provider_config['folder_whitelist']
|
whitelist = provider.provider_config['folder_whitelist']
|
||||||
provider.purge_unconfigured_folders(base_folders, configured_folders, whitelist)
|
provider.purge_unconfigured_folders(base_folders, configured_folders, whitelist)
|
||||||
|
|
|
||||||
|
|
@ -1418,16 +1418,24 @@ EOT
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
it 'should return a list of pool folders' do
|
context 'when evaluating pool folders' do
|
||||||
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_return(datacenter)
|
before do
|
||||||
|
expect(subject).not_to be_nil
|
||||||
|
# Inject mock provider into global variable - Note this is a code smell
|
||||||
|
$providers = { provider_name => provider }
|
||||||
|
end
|
||||||
|
|
||||||
expect(subject.pool_folders(provider)).to eq(expected_response)
|
it 'should return a list of pool folders' do
|
||||||
end
|
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_return(datacenter)
|
||||||
|
|
||||||
it 'should raise an error when the provider fails to get the datacenter' do
|
expect(subject.pool_folders(provider_name)).to eq(expected_response)
|
||||||
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_raise('mockerror')
|
end
|
||||||
|
|
||||||
expect{ subject.pool_folders(provider) }.to raise_error(RuntimeError, 'mockerror')
|
it 'should raise an error when the provider fails to get the datacenter' do
|
||||||
|
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_raise('mockerror')
|
||||||
|
|
||||||
|
expect{ subject.pool_folders(provider_name) }.to raise_error(RuntimeError, 'mockerror')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1456,20 +1464,28 @@ EOT
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
it 'should run purge_unconfigured_folders' do
|
context 'when purging folders' do
|
||||||
expect(subject).to receive(:pool_folders).and_return(configured_folders)
|
before do
|
||||||
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist)
|
expect(subject).not_to be_nil
|
||||||
expect(provider).to receive(:provider_config).and_return({})
|
# Inject mock provider into global variable - Note this is a code smell
|
||||||
|
$providers = { provider_name => provider }
|
||||||
|
end
|
||||||
|
|
||||||
subject.purge_vms_and_folders(provider)
|
it 'should run purge_unconfigured_folders' do
|
||||||
end
|
expect(subject).to receive(:pool_folders).and_return(configured_folders)
|
||||||
|
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist)
|
||||||
|
expect(provider).to receive(:provider_config).and_return({})
|
||||||
|
|
||||||
it 'should raise any errors' do
|
subject.purge_vms_and_folders(provider_name)
|
||||||
expect(subject).to receive(:pool_folders).and_return(configured_folders)
|
end
|
||||||
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist).and_raise('mockerror')
|
|
||||||
expect(provider).to receive(:provider_config).and_return({})
|
|
||||||
|
|
||||||
expect{ subject.purge_vms_and_folders(provider) }.to raise_error(RuntimeError, 'mockerror')
|
it 'should raise any errors' do
|
||||||
|
expect(subject).to receive(:pool_folders).and_return(configured_folders)
|
||||||
|
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist).and_raise('mockerror')
|
||||||
|
expect(provider).to receive(:provider_config).and_return({})
|
||||||
|
|
||||||
|
expect{ subject.purge_vms_and_folders(provider_name) }.to raise_error(RuntimeError, 'mockerror')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue