def define_resource_requirements
access_controls.requires_changes?
requirements.assert(:create) do |a|
parent_directory = ::File.dirname(@new_resource.path)
a.assertion { @new_resource.recursive || ::File.directory?(parent_directory) }
a.failure_message(Chef::Exceptions::EnclosingDirectoryDoesNotExist, "Parent directory #{parent_directory} does not exist, cannot create #{@new_resource.path}")
a.whyrun("Assuming directory #{parent_directory} would have been created")
end
requirements.assert(:create) do |a|
parent_directory = ::File.dirname(@new_resource.path)
a.assertion do
if @new_resource.recursive
is_parent_writable = lambda do |base_dir|
base_dir = ::File.dirname(base_dir)
if ::File.exist?(base_dir)
::File.writable?(base_dir)
else
is_parent_writable.call(base_dir)
end
end
is_parent_writable.call(@new_resource.path)
else
if !whyrun_mode? || ::File.exist?(parent_directory)
::File.writable?(parent_directory)
else
true
end
end
end
a.failure_message(Chef::Exceptions::InsufficientPermissions,
"Cannot create #{@new_resource} at #{@new_resource.path} due to insufficient permissions")
end
requirements.assert(:delete) do |a|
a.assertion do
if ::File.exist?(@new_resource.path)
::File.directory?(@new_resource.path) && ::File.writable?(@new_resource.path)
else
true
end
end
a.failure_message(RuntimeError, "Cannot delete #{@new_resource} at #{@new_resource.path}!")
end
end