class Nifty::Events::Opennebula::RegistrationEvent
OpenNebula registration event
@author Michal Kimle
Attributes
Public Class Methods
@see Nifty::Events::Event#event?
# File lib/nifty/events/opennebula/registration_event.rb, line 10 def self.event? true end
@see Nifty::Events::Opennebula::Event#initialize @attr [Nifty::Backends::Utils::Opennebula::ImageHandler] image_handler
@attr [Nifty::Backends::Utils::Opennebula::TemplateHandler] template_handler
@attr [Nifty::Backends::Utils::Opennebula::GroupHandler] group_handler
@attr [Array] original_disks
array of original image file paths before transfer
Nifty::Events::Opennebula::Event::new
# File lib/nifty/events/opennebula/registration_event.rb, line 21 def initialize(appliance, transfer_method, client, datastores, parameters) super(appliance, transfer_method, client, datastores, parameters) @image_handler = Nifty::Backends::Utils::Opennebula::ImageHandler.new(client) @template_handler = Nifty::Backends::Utils::Opennebula::TemplateHandler.new(client) @group_handler = Nifty::Backends::Utils::Opennebula::GroupHandler.new(client) @original_disks = [] end
Public Instance Methods
# File lib/nifty/events/opennebula/registration_event.rb, line 31 def run logger.debug("Runnig event #{self.inspect}") transfer_disks expire_appliance(template_handler, image_handler, appliance, parameters) groups = groups(group_handler, appliance, parameters[:groups]) # due to OpenNebula restrictions appliances have to be registered separately for each datastore and each group datastores.each do |datastore| groups.each do |group| image_data = register_disks(group, datastore) register_appliance(image_data, group, datastore) end end clean_original_disks rescue Nifty::Errors::Backends::OpennebulaError, Nifty::Errors::TransferMethodError, Nifty::Errors::ApiCallTimeoutError => ex fail Nifty::Errors::Events::EventError, ex ensure clean_copied_disks end
Private Instance Methods
Calls a selected transfer method's cleanup for previously transfered disks
# File lib/nifty/events/opennebula/registration_event.rb, line 71 def clean_copied_disks original_disks.each do |disk| transfer_method.clean_copy disk end end
Calls a selected transfer method's cleanup for original disks
# File lib/nifty/events/opennebula/registration_event.rb, line 64 def clean_original_disks original_disks.each do |disk| transfer_method.clean_original disk end end
Registers an appliance in OpenNebula Creates VM templates pointing to previously registered disks in OpenNebula
@param [Hash] image_data hash containing username of the user owning the disks in OpenNebula and their names @param [String] group @param [String] datastore
# File lib/nifty/events/opennebula/registration_event.rb, line 105 def register_appliance(image_data, group, datastore) logger.debug("Registering appliance #{appliance.inspect}") name = parameters[:"description-naming"] ? "#{appliance.identifier}@#{datastore.name}" : ::SecureRandom.uuid template_template = Nifty::Backends::Utils::Opennebula::TemplateHandler.prepare_template(parameters[:"template-dir"], appliance: appliance, disk_names: image_data[:disk_names], name: name, username: image_data[:username]) template = template_handler.register_template(template_template) Nifty::Backends::Utils::Opennebula::Handler.chown(template, Nifty::Backends::Utils::Opennebula::Handler::LEAVE_AS_IS, group.id) Nifty::Backends::Utils::Opennebula::Handler.chmod(template, parameters[:permissions]) end
Registers disks of event's applaince
@param [String] group @param [OpenNebula::Datastore] datastore @return [Hash] hash containing username of the user owning the disks in OpenNebula and their names
# File lib/nifty/events/opennebula/registration_event.rb, line 82 def register_disks(group, datastore) disk_names = [] image = nil appliance.disks.each_with_index do |disk, index| logger.debug("Registering disk #{disk.inspect}") name = parameters[:"description-naming"] ? "#{appliance.identifier}-#{appliance.version}-#{'%02d' % (index + 1)}@#{datastore.name}" : ::SecureRandom.uuid template = Nifty::Backends::Utils::Opennebula::ImageHandler.prepare_template(parameters[:"template-dir"], appliance: appliance, disk: disk, name: name) image = image_handler.register_image(template, datastore) Nifty::Backends::Utils::Opennebula::Handler.chown(image, Nifty::Backends::Utils::Opennebula::Handler::LEAVE_AS_IS, group.id) Nifty::Backends::Utils::Opennebula::Handler.chmod(image, parameters[:permissions]) disk_names << name end { :username => image['UNAME'], :disk_names => disk_names } end
Calls a selected transfer method on all disks within an appliance
# File lib/nifty/events/opennebula/registration_event.rb, line 56 def transfer_disks appliance.disks.each do |disk| original_disks << disk.path disk.path = transfer_method.transfer disk.path end end