class Chef::Provider::OneTemplate

Implementation of Provider class.

Attributes

current_id[R]
equal_mode[R]
equal_template[R]
uname[R]

Public Instance Methods

load_current_resource() click to toggle source
# File lib/chef/provider/one_template.rb, line 40
def load_current_resource
  driver = self.driver
  @uname = uname
  @current_resource = Chef::Resource::OneTemplate.new(new_resource.name,
                                                      run_context)
  @current_resource.name(new_resource.name)
  template = driver.one.get_resource(:template,
                                     :name => @current_resource.name,
                                     :uname => @uname)
  @current_resource.exists = !template.nil?

  return unless @current_resource.exists

  new_resource_template = if @new_resource.template_file.nil?
                            convert_types(@new_resource.template)
                          else
                            driver.one.template_from_file(@new_resource.template_file)
                          end

  @current_id = template.to_hash['VMTEMPLATE']['ID'].to_i
  @current_resource.template(template.to_hash['VMTEMPLATE']['TEMPLATE'])
  @current_resource.mode(get_mode(template))
  @equal_template = @current_resource.template == new_resource_template
  @equal_mode = @current_resource.mode == new_resource.mode
  @current_resource.equal = @equal_template && @equal_mode
end
whyrun_supported?() click to toggle source
# File lib/chef/provider/one_template.rb, line 36
def whyrun_supported?
  true
end

Protected Instance Methods

convert_types(hash) click to toggle source
# File lib/chef/provider/one_template.rb, line 153
def convert_types(hash)
  tpl_str = driver.one.create_template(hash)
  t_hash = nil
  doc = OpenNebula::CustomObject.new(OpenNebula::CustomObject.build_xml, driver.one.client)
  unless OpenNebula.is_error?(doc)
    rc = doc.allocate(tpl_str)
    fail "Failed to allocate OpenNebula document: #{rc.message}" if OpenNebula.is_error?(rc)
    doc.info!
    t_hash = doc.to_hash['DOCUMENT']['TEMPLATE']
    doc.delete
  end
  t_hash
end
create_one_template(template_str) click to toggle source
# File lib/chef/provider/one_template.rb, line 130
def create_one_template(template_str)
  unless new_resource.template.key?('NAME')
    template_str << "\n" << 'NAME="' << new_resource.name << '"'
  end
  driver.one.allocate_template(template_str)
  template = driver.one.get_resource(:template,
                                     :name => @current_resource.name,
                                     :uname => @uname)
  driver.one.chmod_resource(template, new_resource.mode)
end
create_template() click to toggle source
# File lib/chef/provider/one_template.rb, line 141
def create_template
  fail("Attributes 'template_file' and 'template' are mutually 'exclusive.'") if new_resource.template_file && !new_resource.template.empty?
  if new_resource.template_file
    ::File.read(new_resource.template_file)
  elsif !new_resource.template.empty?
    driver.one.create_template(new_resource.template)
  else
    fail("Missing attribute 'template_file' or 'template' in " \
         'resource block.')
  end
end
driver() click to toggle source
# File lib/chef/provider/one_template.rb, line 118
def driver
  current_driver = begin
    if new_resource.driver
      run_context.chef_provisioning.driver_for(new_resource.driver)
    elsif run_context.chef_provisioning.current_driver
      run_context.chef_provisioning.driver_for(run_context.chef_provisioning.current_driver)
    end
  end
  fail "Driver not specified for one_template  #{new_resource.name}" unless current_driver
  current_driver
end
get_mode(template) click to toggle source
# File lib/chef/provider/one_template.rb, line 167
def get_mode(template)
  perms = template.to_hash['VMTEMPLATE']['PERMISSIONS']
  mode = 0
  %w(OWNER_U OWNER_M OWNER_A GROUP_U GROUP_M GROUP_A
     OTHER_U OTHER_M OTHER_A).each do |m|
    mode += perms[m].to_i
    mode = mode << 1
  end
  mode = mode >> 1
  mode.to_s(8)
end