mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 18:08:42 -05:00
(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:
parent
7e5ef2f4e5
commit
a34c8dd11b
5 changed files with 585 additions and 0 deletions
|
|
@ -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']
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue