厨师食谱如何检查文件是否存在

Chef Recipe How To Check If File Exists

我刚开始使用 Chef,我想弄清楚如何在执行任何操作之前先检查文件是否存在。

我有当前用例的文件部分,我正在删除生产服务器的登录文件,例如:

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

但是,我希望能够先检查文件是否存在,例如

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

如评论中所述,对于删除操作,if 语句是不必要的,因为如果 chef 没有找到要删除的文件,它将假定它已被删除。

否则,您通常希望在资源中使用 guard properties(适用于所有资源),而不是将资源包装在 if-then 中。

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

您可能还想熟悉 the Ruby File class methods

Chef 的基本思想是您声明系统的理想状态,然后 Chef 将其与实际状态进行比较,并做出使系统进入理想状态所需的任何更改。在删除文件之前,您不需要 if 语句来检查文件是否存在;如果我没记错的话,Chef 自己应该检查文件是否存在。