Merge pull request #370 from mattkirby/purge_failed

(POOLER-165) Fix purge_unconfigured_folders
This commit is contained in:
Brandon High 2020-04-07 11:27:36 -07:00 committed by GitHub
commit 9ab1b89a6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 17 deletions

View file

@ -444,7 +444,7 @@ module Vmpooler
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.to_s)
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} VMs and folders with an error: #{e}")
end end
@ -455,14 +455,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
folder_parts = pool['folder'].split('/') folder_parts = pool['folder'].split('/')
datacenter = provider.get_target_datacenter_from_config(pool['name']) datacenter = $providers[provider_name].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
@ -479,8 +478,8 @@ module Vmpooler
def purge_vms_and_folders(provider) def purge_vms_and_folders(provider)
configured_folders = pool_folders(provider) configured_folders = pool_folders(provider)
base_folders = get_base_folders(configured_folders) base_folders = get_base_folders(configured_folders)
whitelist = provider.provider_config['folder_whitelist'] whitelist = $providers[provider].provider_config['folder_whitelist']
provider.purge_unconfigured_folders(base_folders, configured_folders, whitelist) $providers[provider].purge_unconfigured_folders(base_folders, configured_folders, whitelist)
end end
def create_vm_disk(pool_name, vm, disk_size, provider) def create_vm_disk(pool_name, vm, disk_size, provider)

View file

@ -118,11 +118,11 @@ module Vmpooler
base_folders.each do |base_folder| base_folders.each do |base_folder|
folder_children = get_folder_children(base_folder, connection) folder_children = get_folder_children(base_folder, connection)
unless folder_children.empty? next if folder_children.empty?
folder_children.each do |folder_hash|
folder_hash.each do |folder_title, folder_object| folder_children.each do |folder_hash|
destroy_folder_and_children(folder_object) unless folder_configured?(folder_title, base_folder, configured_folders, whitelist) folder_hash.each do |folder_title, folder_object|
end destroy_folder_and_children(folder_object) unless folder_configured?(folder_title, base_folder, configured_folders, whitelist)
end end
end end
end end

View file

@ -1096,15 +1096,15 @@ EOT
} }
it 'should return a list of pool folders' do it 'should return a list of pool folders' do
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_return(datacenter) expect($providers[provider_name]).to receive(:get_target_datacenter_from_config).with(pool).and_return(datacenter)
expect(subject.pool_folders(provider)).to eq(expected_response) expect(subject.pool_folders(provider_name)).to eq(expected_response)
end end
it 'should raise an error when the provider fails to get the datacenter' do 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($providers[provider_name]).to receive(:get_target_datacenter_from_config).with(pool).and_raise('mockerror')
expect{ subject.pool_folders(provider) }.to raise_error(RuntimeError, 'mockerror') expect{ subject.pool_folders(provider_name) }.to raise_error(RuntimeError, 'mockerror')
end end
end end
@ -1135,14 +1135,16 @@ EOT
it 'should run purge_unconfigured_folders' do it 'should run purge_unconfigured_folders' do
expect(subject).to receive(:pool_folders).and_return(configured_folders) expect(subject).to receive(:pool_folders).and_return(configured_folders)
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist) expect($providers[provider_name]).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist)
expect($providers[provider_name]).to receive(:provider_config).and_return({})
subject.purge_vms_and_folders(provider) subject.purge_vms_and_folders(provider)
end end
it 'should raise any errors' do it 'should raise any errors' do
expect(subject).to receive(:pool_folders).and_return(configured_folders) 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($providers[provider_name]).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist).and_raise('mockerror')
expect($providers[provider_name]).to receive(:provider_config).and_return({})
expect{ subject.purge_vms_and_folders(provider) }.to raise_error(RuntimeError, 'mockerror') expect{ subject.purge_vms_and_folders(provider) }.to raise_error(RuntimeError, 'mockerror')
end end