2016-05-07 10 views
0

シェフの実行終了時にファイルを削除します。
私はシェフの終了時にファイルを削除する

file "#{home_dir['data']}/file1.txt" do 
    action :delete 
    retries 3 
    retry_delay 50 
    only_if { ::File.exist? "#{home_dir['data']}/file1.txt" } 
end 

それを達成するためのより良い方法がある場合は私に知らせてくださいことを達成するために、次のfile resourceを使用しています。

+0

実際に(確かに)_ではなく、シェフの実行中です。 – StephenKing

+0

@mealhourあなたはifとonly_if ..を使ってはいけません。すでにその冪等があります。そして質問をするにはシェフの実行中に行われた –

答えて

0

これは間違いありませんが、only_ifは必要ありません。ファイルリソースはすでに内部で冪等化されています。実際にunlink()が奇妙なネットワークファイルシステムのように失敗すると予想しない限り、おそらくretriesは必要ありませんが、何も傷つけることはありません。

EDIT:同じリソースタイプ+名前がレシピに2回ある場合、リソースの複製を回避する方法。指定されていない場合

file "delete #{home_dir['data']}/file1.txt (or some other unique name)" do 
    path "#{home_dir['data']}/file1.txt" 
    action :delete 
end 

pathプロパティのデフォルトは名を使用するように、彼らは衝突を避けるために独立して変更することができます。

+0

それは動作していません。私は '' /path/to/file.txt ''を作成しているレシピの他の部分を持っています。 ''最後に私はファイルを削除します。 do アクション:削除 retry_delay 50 end'これは動作していません – meallhour

+0

最後に 'file resource'を置いていても、動作しているようです他のコマンドの前に – meallhour

+0

レシピコードに同じリソースタイプ+名前のペアが2回ある場合は、リソースの複製の問題が発生する可能性があります。警告が表示されます。私は答えにそれらを避ける方法を追加しました。 – coderanger