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