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

时间:2016-07-07 23:27:26

标签: ruby if-statement chef chef-recipe

我刚刚开始使用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

2 个答案:

答案 0 :(得分:11)

正如评论中所提到的,对于删除操作,如上所述,if语句是不必要的,因为如果厨师没有找到要删除的文件,则会认为它已被删除。

否则,您通常希望在资源中使用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

答案 1 :(得分:2)

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