class Nifty::Backends::Utils::Opennebula::TemplateHandler
Handler for OpenNebula TemplatePool
@author Michal Kimle
Public Class Methods
Constructor
@see Nifty::Backends::Utils::Opennebula::Handler#initialize
Nifty::Backends::Utils::Opennebula::Handler::new
# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 14 def initialize(client) super(client) @pool = OpenNebula::TemplatePool.new(client) end
Prepares a template for a template
@param [String] template_dir directory with templates @param [Hash] data used while populating a template @return [String] final template for a template
# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 85 def self.prepare_template(template_dir, data) template_location = File.join(template_dir, "template.erb") fail Nifty::Errors::ArgumentError, "Missing file 'template.erb' in template directory '#{template_dir}'" unless File.exist?(template_location) template = Tilt::ERBTemplate.new(template_location) template_content = template.render(Object.new, data) template = Tilt::ERBTemplate.new(File.join(Nifty::GEM_DIR, 'templates', 'template.erb')) nifty_template_content = template.render(Object.new, data) whole_template_content = template_content + nifty_template_content logger.debug "Populated template template:\n#{whole_template_content}" whole_template_content end
Public Instance Methods
Deletes template
@param [OpenNebula::Template] template @raise [Nifty::Errors::ApiCallTimeoutError] if template isn't deleted within a timeout
# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 51 def delete_template(template) template.info! id = template.id logger.debug("Deleting template with id #{id.inspect}") Nifty::Backends::Utils::Opennebula::Helper.handle_opennebula_error { template.delete } Timeout::timeout(Nifty::Backends::Utils::Opennebula::Handler.api_call_timeout) do while(template_exist?(id)) sleep(Nifty::Backends::Utils::Opennebula::Handler::API_POLLING_WAIT) end end rescue Timeout::Error fail Nifty::Errors::ApiCallTimeoutError, "Template with id #{template.id.inspect} was not deleted within timeout" end
Registers a new template
@param [String] template_template template for template
# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 70 def register_template(template_template) template_alloc = ::OpenNebula::Template.build_xml template = ::OpenNebula::Template.new(template_alloc, client) logger.debug("Registering template with template\n#{template_template}") Nifty::Backends::Utils::Opennebula::Helper.handle_opennebula_error { template.allocate(template_template) } template end
Returns template with given id if exists
@param [Fixnum] id @return [OpenNebula::Template] template with given id
# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 41 def template_exist?(id) reload! pool.find { |template| template.id == id } end
Returns all templates for given appliance id
@param [String] appliance_id @return [Array] array of templates
# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 23 def templates(appliance_id, users = []) reload! return pool.find_all { |template| template["TEMPLATE/#{ATTRIBUTE_APPLIANCE_ID}"] == appliance_id && users.include?(template['UNAME']) } unless users.blank? pool.find_all { |template| template["TEMPLATE/#{ATTRIBUTE_APPLIANCE_ID}"] == appliance_id } end
# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 31 def unmanaged_templates_with_image(image_name) reload! pool.find_all { |template| template["TEMPLATE/DISK/IMAGE"] == image_name && template["TEMPLATE/#{ATTRIBUTE_APPLIANCE_ID}"].nil? } end