module PoolParty
module Resources
=begin rdoc rdoc
== File
The file resource is used to describe a file that should be present on all of the instances.
== Usage
has_file(:name => '...') do
# More options.
# This block is optional
end
== Options
* name Describe the location of the file with the name
* mode Describe the mode of the file (default: 644)
* owner The owner of the file (default: poolparty user)
* content The contents of the file
* source Used to describe a file that is hosted on the master instance.
* template The file contents are described with the template. The location given must be readable
To write a file to the template directory, use:
copy_template_to_storage_directory(filepath)
== Example
has_file(:name => '/etc/motd', :content => 'Hey and welcome to your node today!')
=end
class File < Resource
def loaded(o={}, &block)
parent.has_directory ::File.dirname(name) if parent
end
def present
:create
end
def absent
:delete
end
def after_create
run_render = dsl_options.include?(:render_as) ? dsl_options.delete(:render_as) : false
if dsl_options.include?(:template)
filename = ::File.expand_path(dsl_options.template)
dsl_options.delete(:template)
file = ::File.basename( filename )
raise TemplateNotFound.new("no template given") unless file
template_opts = (parent ? options.merge(parent.options) : options)
options.merge!(:content => run_render ? Template.compile_file(filename, template_opts.merge(:renderer => run_render)).gsub("\"", "\"") : open(filename).read)
end
if dsl_options.include?(:content)
cont = dsl_options.delete(:content)
template_opts = (parent ? options.merge(parent.options) : options).merge(:renderer => run_render)
options.merge!(:content => run_render ? Template.compile_string(cont, template_opts) : cont)
end
end
def method_missing m, *a, &block
super rescue ::File.send(m, *a, &block)
end
end
end
end