2016-07-07 14 views
2

シェフの使用を始めたばかりです。何かをする前にファイルが存在するかどうかを最初に確認する方法を見つけようとしています。私が最初かどうかを確認するために付ける機能が欲しい、しかしシェフのレシピファイルが存在するかどうかチェックする方法

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 
+0

なぜこの機能が必要ですか?シェフは、システムの希望の状態があなたが説明した状態と等しいかどうかをチェックしません。希望の状態が異なる場合にのみ変更しますか?実際の問題やエラーメッセージは、現在解決しようとしているものは何ですか? –

+0

お返事ありがとう@DavidGrayson。私はシェフとは新しいので、あなたはあなたの考えに合っているかもしれません。私は現在、何らかのエラーや問題を抱えているわけではありませんが、私は条件文を書くのに慣れています。これは正しいことのように思えます。これは私の考え方の欠陥かもしれません。シェフがどのように運営しているかこの場合、ファイルが存在するかどうかを確認する必要はありませんか?ファイルが存在せず、それを削除しようとしているレシピがまだ出ていない場合は、エラーが表示されません。 – Corey

+0

シェフのファイルは通常削除しませんが、作成すると「if」文が不要なので、削除するときに「if」文が必要な理由はわかりません。 –

答えて

7

は、削除アクションのために、if文では、不要です。

それ以外の場合は、通常、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にも慣れ親しんでください。

+0

ありがとう、カレン、これはとても役に立ちます。 – Corey

+0

以下に述べるようにこれは冗長です。ファイルが存在しない場合、 'file'リソースは':delete'アクションのために何もしません。 – coderanger

2

シェフの基本的な考え方は、システムの望ましい状態を述べ、シェフがそれを実際の状態と比較し、システムを望ましい状態にするために必要な変更を加えることです。ファイルを削除する前にファイルが存在するかどうかを確認するif文を持つ必要はありません。私が間違っていない場合、シェフ自身がファイルが存在するかどうかをチェックする必要があります。

+0

説明していただきありがとうございます。シェフはあなたのインフラストラクチャが欲しい国のための宣言的な記述であるという事実に私の考え方を変え続ける必要があるようですので、これは大きな覚えです。 – Corey

関連する問題