web-dev-qa-db-ja.com

シェフのレシピファイルが存在するかどうかを確認する方法

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
6
Corey

コメントで述べたように、削除アクションの場合、ifステートメントは不要です。これは、chefが削除するファイルを見つけられなかった場合、すでに削除されていると見なすためです。

それ以外の場合は、リソースをif-thenでラップするのではなく、通常、リソースで guard properties を使用します(すべてのリソースで使用可能)。

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

そして、おそらく the Ruby File class methods にも慣れることをお勧めします。

14
Karen B

Chefの基本的な考え方は、システムの望ましい状態を記述し、それをChefが実際の状態と比較し、システムを望ましい状態にするために必要な変更を加えることです。削除する前にファイルが存在するかどうかを確認するためのifステートメントを用意する必要はありません。 Chef自体が、ファイルが存在するかどうかを私が間違っていないかどうか確認する必要があります。

2
David Grayson