Corey Corey - 5 months ago 108
Ruby Question

Chef Recipe How To Check If File Exists

I just started using Chef and I'm trying to figure out how to first check if a file exists before doing anything.

I have the file part down for my current use case, where I'm removing a login file for the production server, ex:

file '/var/www/html/login.php' do
action :delete
end


However, I'd like the abilty to first check if the file exists, ex.

if (file_exists === true)
file '/var/www/html/login.php' do
action :delete
end
end

Answer

As mentioned in the comments, for a deletion action, the if statement is unnecessary, as mentioned, because if chef doesn't find the file to be deleted, it will assume it was already deleted.

Otherwise, you generally want to use guard properties in the resource (available for all resources), rather than wrapping a resource in an if-then.

file '/var/www/html/login.php' do
    only_if { ::File.exist?('/var/www/html/login.php') }
    action :touch
end

And you probably also want to familiarize yourself with the Ruby File class methods.