class Nifty::Backends::Utils::Opennebula::TemplateHandler

Handler for OpenNebula TemplatePool

@author Michal Kimle

Public Class Methods

new(client) click to toggle source

Constructor

@see Nifty::Backends::Utils::Opennebula::Handler#initialize

# File lib/nifty/backends/utils/opennebula/template_handler.rb, line 14
def initialize(client)
  super(client)
  @pool = OpenNebula::TemplatePool.new(client)
end
prepare_template(template_dir, data) click to toggle source

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

delete_template(template) click to toggle source

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
register_template(template_template) click to toggle source

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
template_exist?(id) click to toggle source

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
templates(appliance_id, users = []) click to toggle source

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
unmanaged_templates_with_image(image_name) click to toggle source
# 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