class Cloudkeeper::Managers::ApplianceManager
Attributes
acceptable_formats[R]
backend_connector[R]
image_list_manager[R]
Public Class Methods
new()
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 8 def initialize @backend_connector = Cloudkeeper::BackendConnector.new @image_list_manager = Cloudkeeper::Managers::ImageListManager.new @acceptable_formats = Cloudkeeper::Settings[:formats].map(&:to_sym) end
Public Instance Methods
errors()
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 25 def errors { backend_errors: backend_connector.errors } end
synchronize_appliances()
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 14 def synchronize_appliances logger.debug 'Running appliance synchronization...' backend_connector.pre_action synchronize backend_connector.post_action rescue Cloudkeeper::Errors::BackendError, Cloudkeeper::Errors::ImageList::ImageListError => ex abort ex.message end
Private Instance Methods
add_appliance(appliance)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 143 def add_appliance(appliance) modify_appliance :add_appliance, appliance end
add_appliances(backend_appliances, image_list_appliances)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 98 def add_appliances(backend_appliances, image_list_appliances) logger.debug 'Registering new appliances...' add_list = image_list_appliances.keys - backend_appliances.keys logger.debug "Appliances to register: #{add_list.inspect}" add_list.each do |appliance_identifier| appliance = image_list_appliances[appliance_identifier] if appliance.expired? log_expired appliance, 'Skipping expired appliance' next end add_appliance appliance end end
add_new_appliances(image_list)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 55 def add_new_appliances(image_list) image_list.appliances.each_value do |appliance| if appliance.expired? log_expired appliance, 'Skipping expired appliance' next end add_appliance appliance end end
modify_appliance(method, appliance)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 147 def modify_appliance(method, appliance) prepare_image!(appliance) if appliance.image backend_connector.send method, appliance rescue Cloudkeeper::Errors::Image::DownloadError, Cloudkeeper::Errors::Image::ConversionError => ex logger.error "Image preparation error: #{ex.message}" rescue Cloudkeeper::Errors::Appliance::PropagationError => ex logger.error "Appliance propagation error: #{ex.message}" ensure clean_image_files appliance end
remove_appliances(backend_appliances, image_list_appliances)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 91 def remove_appliances(backend_appliances, image_list_appliances) logger.debug 'Removing previously registered appliances...' remove_list = backend_appliances.keys - image_list_appliances.keys logger.debug "Appliances to remove: #{remove_list.inspect}" remove_list.each { |appliance_identifier| backend_connector.remove_appliance backend_appliances[appliance_identifier] } end
remove_expired_image_list(image_list)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 86 def remove_expired_image_list(image_list) logger.debug "Removing expired image list #{image_list.identifier.inspect}" backend_connector.remove_image_list image_list.identifier end
sync_image_list(image_list)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 77 def sync_image_list(image_list) backend_appliances = backend_connector.appliances image_list.identifier image_list_appliances = image_list.appliances remove_appliances backend_appliances, image_list_appliances add_appliances backend_appliances, image_list_appliances update_appliances backend_appliances, image_list_appliances end
sync_new_image_list(image_list)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 44 def sync_new_image_list(image_list) logger.debug "Registering appliances from new image list #{image_list.identifier.inspect}" if image_list.expired? log_expired image_list, 'Not registering expired image list' return end add_new_appliances image_list end
sync_old_image_list(image_list)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 66 def sync_old_image_list(image_list) logger.debug "Synchronizing registered appliances from image list #{image_list.identifier.inspect}" if image_list.expired? remove_expired_image_list image_list return end sync_image_list image_list end
synchronize()
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 31 def synchronize backend_connector.remove_expired_appliances image_list_manager.download_image_list image_list = image_list_manager.image_list if backend_connector.image_lists.include? image_list.identifier sync_old_image_list image_list else sync_new_image_list image_list end end
update_appliance(appliance)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 134 def update_appliance(appliance) modify_appliance :update_appliance, appliance end
update_appliance_metadata(appliance)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 138 def update_appliance_metadata(appliance) appliance.image = nil modify_appliance :update_appliance_metadata, appliance end
update_appliances(backend_appliances, image_list_appliances)
click to toggle source
# File lib/cloudkeeper/managers/appliance_manager.rb, line 113 def update_appliances(backend_appliances, image_list_appliances) logger.debug 'Updating appliances...' update_list = backend_appliances.keys & image_list_appliances.keys logger.debug "Appliances for potential update: #{update_list.inspect}" update_list.each do |appliance_identifier| image_list_appliance = image_list_appliances[appliance_identifier] backend_appliance = backend_appliances[appliance_identifier] if image_list_appliance.expired? log_expired image_list_appliance, 'Removing expired appliance' backend_connector.remove_appliance image_list_appliance next end method = :update_appliance_metadata if update_metadata?(image_list_appliance, backend_appliance) method = :update_appliance if update_image?(image_list_appliance, backend_appliance) send method, image_list_appliance if method end end