Knife-Zero doesn't include Berkshelf support, so vendoring everything in the repo is convenient again
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
property :plugin_name, String, name_property: true
 | 
						|
property :path, String
 | 
						|
property :source_file, String
 | 
						|
property :cookbook, String
 | 
						|
property :resource, [:cookbook_file, :template], default: :cookbook_file
 | 
						|
property :variables, Hash
 | 
						|
property :compile_time, [true, false], default: true
 | 
						|
 | 
						|
action :create do
 | 
						|
  # why create_if_missing you ask?
 | 
						|
  # no one can agree on perms and this allows them to manage the perms elsewhere
 | 
						|
  directory desired_plugin_path do
 | 
						|
    action :create
 | 
						|
    recursive true
 | 
						|
    not_if { ::File.exist?(desired_plugin_path) }
 | 
						|
  end
 | 
						|
 | 
						|
  if new_resource.resource.eql?(:cookbook_file)
 | 
						|
    cookbook_file ::File.join(desired_plugin_path, new_resource.plugin_name + '.rb') do
 | 
						|
      cookbook new_resource.cookbook
 | 
						|
      source new_resource.source_file || "#{new_resource.plugin_name}.rb"
 | 
						|
      notifies :reload, "ohai[#{new_resource.plugin_name}]", :immediately
 | 
						|
    end
 | 
						|
  elsif new_resource.resource.eql?(:template)
 | 
						|
    template ::File.join(desired_plugin_path, new_resource.plugin_name + '.rb') do
 | 
						|
      cookbook new_resource.cookbook
 | 
						|
      source new_resource.source_file || "#{new_resource.plugin_name}.rb"
 | 
						|
      variables new_resource.variables
 | 
						|
      notifies :reload, "ohai[#{new_resource.plugin_name}]", :immediately
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  # Add the plugin path to the ohai plugin path if need be and warn
 | 
						|
  # the user that this is going to result in a reload every run
 | 
						|
  unless in_plugin_path?(desired_plugin_path)
 | 
						|
    plugin_path_warning
 | 
						|
    Chef::Log.warn("Adding #{desired_plugin_path} to the Ohai plugin path for this chef-client run only")
 | 
						|
    add_to_plugin_path(desired_plugin_path)
 | 
						|
    reload_required = true
 | 
						|
  end
 | 
						|
 | 
						|
  ohai new_resource.plugin_name do
 | 
						|
    action :nothing
 | 
						|
    action :reload if reload_required
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
action :delete do
 | 
						|
  file ::File.join(desired_plugin_path, new_resource.plugin_name + '.rb') do
 | 
						|
    action :delete
 | 
						|
    notifies :reload, 'ohai[reload ohai post plugin removal]'
 | 
						|
  end
 | 
						|
 | 
						|
  ohai 'reload ohai post plugin removal' do
 | 
						|
    action :nothing
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
action_class do
 | 
						|
  include OhaiCookbook::PluginHelpers
 | 
						|
end
 | 
						|
 | 
						|
# this resource forces itself to run at compile_time
 | 
						|
def after_created
 | 
						|
  return unless compile_time
 | 
						|
  Array(action).each do |action|
 | 
						|
    run_action(action)
 | 
						|
  end
 | 
						|
end
 |