Skip to content

Commit ef4ca26

Browse files
committed
Fix vmpooler folder purging
This commit updates folder purging references to ensure that provider name references are referring to the named provider, rather than the provider type. Without this change folder purging fails because it cannot identify target folders.
1 parent 807daef commit ef4ca26

2 files changed

Lines changed: 44 additions & 29 deletions

File tree

lib/vmpooler/pool_manager.rb

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -539,15 +539,14 @@ def component_to_test(match, labels_string)
539539
def purge_unused_vms_and_folders
540540
global_purge = $config[:config]['purge_unconfigured_folders']
541541
providers = $config[:providers].keys
542-
providers.each do |provider|
543-
provider_purge = $config[:providers][provider]['purge_unconfigured_folders']
544-
provider_purge = global_purge if provider_purge.nil?
542+
providers.each do |provider_key|
543+
provider_purge = $config[:providers][provider_key]['purge_unconfigured_folders'] || global_purge
545544
if provider_purge
546545
Thread.new do
547546
begin
548-
purge_vms_and_folders($providers[provider.to_s])
547+
purge_vms_and_folders(provider_key)
549548
rescue StandardError => e
550-
$logger.log('s', "[!] failed while purging provider #{provider} VMs and folders with an error: #{e}")
549+
$logger.log('s', "[!] failed while purging provider #{provider_key} VMs and folders with an error: #{e}")
551550
end
552551
end
553552
end
@@ -556,14 +555,13 @@ def purge_unused_vms_and_folders
556555
end
557556

558557
# Return a list of pool folders
559-
def pool_folders(provider)
560-
provider_name = provider.name
558+
def pool_folders(provider_name)
561559
folders = {}
562560
$config[:pools].each do |pool|
563-
next unless pool['provider'] == provider_name
561+
next unless pool['provider'] == provider_name.to_s
564562

565563
folder_parts = pool['folder'].split('/')
566-
datacenter = provider.get_target_datacenter_from_config(pool['name'])
564+
datacenter = $providers[provider_name.to_s].get_target_datacenter_from_config(pool['name'])
567565
folders[folder_parts.pop] = "#{datacenter}/vm/#{folder_parts.join('/')}"
568566
end
569567
folders
@@ -577,8 +575,9 @@ def get_base_folders(folders)
577575
base.uniq
578576
end
579577

580-
def purge_vms_and_folders(provider)
581-
configured_folders = pool_folders(provider)
578+
def purge_vms_and_folders(provider_name)
579+
provider = $providers[provider_name.to_s]
580+
configured_folders = pool_folders(provider_name)
582581
base_folders = get_base_folders(configured_folders)
583582
whitelist = provider.provider_config['folder_whitelist']
584583
provider.purge_unconfigured_folders(base_folders, configured_folders, whitelist)

spec/unit/pool_manager_spec.rb

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,16 +1418,24 @@
14181418
)
14191419
}
14201420

1421-
it 'should return a list of pool folders' do
1422-
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_return(datacenter)
1421+
context 'when evaluating pool folders' do
1422+
before do
1423+
expect(subject).not_to be_nil
1424+
# Inject mock provider into global variable - Note this is a code smell
1425+
$providers = { provider_name => provider }
1426+
end
14231427

1424-
expect(subject.pool_folders(provider)).to eq(expected_response)
1425-
end
1428+
it 'should return a list of pool folders' do
1429+
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_return(datacenter)
14261430

1427-
it 'should raise an error when the provider fails to get the datacenter' do
1428-
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_raise('mockerror')
1431+
expect(subject.pool_folders(provider_name)).to eq(expected_response)
1432+
end
14291433

1430-
expect{ subject.pool_folders(provider) }.to raise_error(RuntimeError, 'mockerror')
1434+
it 'should raise an error when the provider fails to get the datacenter' do
1435+
expect(provider).to receive(:get_target_datacenter_from_config).with(pool).and_raise('mockerror')
1436+
1437+
expect{ subject.pool_folders(provider_name) }.to raise_error(RuntimeError, 'mockerror')
1438+
end
14311439
end
14321440
end
14331441

@@ -1456,20 +1464,28 @@
14561464
)
14571465
}
14581466

1459-
it 'should run purge_unconfigured_folders' do
1460-
expect(subject).to receive(:pool_folders).and_return(configured_folders)
1461-
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist)
1462-
expect(provider).to receive(:provider_config).and_return({})
1467+
context 'when purging folders' do
1468+
before do
1469+
expect(subject).not_to be_nil
1470+
# Inject mock provider into global variable - Note this is a code smell
1471+
$providers = { provider_name => provider }
1472+
end
14631473

1464-
subject.purge_vms_and_folders(provider)
1465-
end
1474+
it 'should run purge_unconfigured_folders' do
1475+
expect(subject).to receive(:pool_folders).and_return(configured_folders)
1476+
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist)
1477+
expect(provider).to receive(:provider_config).and_return({})
14661478

1467-
it 'should raise any errors' do
1468-
expect(subject).to receive(:pool_folders).and_return(configured_folders)
1469-
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist).and_raise('mockerror')
1470-
expect(provider).to receive(:provider_config).and_return({})
1479+
subject.purge_vms_and_folders(provider_name)
1480+
end
14711481

1472-
expect{ subject.purge_vms_and_folders(provider) }.to raise_error(RuntimeError, 'mockerror')
1482+
it 'should raise any errors' do
1483+
expect(subject).to receive(:pool_folders).and_return(configured_folders)
1484+
expect(provider).to receive(:purge_unconfigured_folders).with(base_folders, configured_folders, whitelist).and_raise('mockerror')
1485+
expect(provider).to receive(:provider_config).and_return({})
1486+
1487+
expect{ subject.purge_vms_and_folders(provider_name) }.to raise_error(RuntimeError, 'mockerror')
1488+
end
14731489
end
14741490
end
14751491

0 commit comments

Comments
 (0)