(POOLER-66) Purge vms and folders no longer configured

This commit enables optional purging for vms and folders when they are
not configured in the vmpooler provided configuration. Base folders are
determined from folders specified in the pool configuration. Then,
anything not configured in that folder for that provider and is not a
whitelisted folder title will be destroyed. Without this change vmpooler
will leave unconfigured vms and folders behind and any vms will be left
running forever without manual intervention. Additionally, any
associated redis data will never be expired.
This commit is contained in:
kirby@puppetlabs.com 2018-06-29 11:47:32 -07:00
parent 7e5ef2f4e5
commit a34c8dd11b
5 changed files with 585 additions and 0 deletions

View file

@ -287,6 +287,54 @@ module Vmpooler
end
end
def purge_unused_vms_and_folders
global_purge = $config[:config]['purge_unconfigured_folders']
providers = $config[:providers].keys
providers.each do |provider|
provider_purge = $config[:providers][provider]['purge_unconfigured_folders']
provider_purge = global_purge if provider_purge.nil?
if provider_purge
Thread.new do
begin
purge_vms_and_folders($providers[provider.to_s])
rescue => err
$logger.log('s', "[!] failed while purging provider #{provider.to_s} VMs and folders with an error: #{err}")
end
end
end
end
return
end
# Return a list of pool folders
def pool_folders(provider)
provider_name = provider.name
folders = {}
$config[:pools].each do |pool|
next unless pool['provider'] == provider_name
folder_parts = pool['folder'].split('/')
datacenter = provider.get_target_datacenter_from_config(pool['name'])
folders[folder_parts.pop] = "#{datacenter}/vm/#{folder_parts.join('/')}"
end
folders
end
def get_base_folders(folders)
base = []
folders.each do |key, value|
base << value
end
base.uniq
end
def purge_vms_and_folders(provider)
provider_name = provider.name
configured_folders = pool_folders(provider)
base_folders = get_base_folders(configured_folders)
whitelist = $config[:providers][provider_name.to_sym]['folder_whitelist']
provider.purge_unconfigured_folders(base_folders, configured_folders, whitelist)
end
def create_vm_disk(pool_name, vm, disk_size, provider)
Thread.new do
begin
@ -961,6 +1009,8 @@ module Vmpooler
end
end
purge_unused_vms_and_folders
loop_count = 1
loop do
if !$threads['disk_manager']