私はシェフと料理本の初心者です。クックブックを作成していて、ファイルの最後にコンテンツ (テキスト) を追加したいと考えています。現時点では、私は使用しています:
file "#{node['dir']}/#{params[:name]}.txt" do
content "my full text"
end
ただし、上書きされるため、常に「コンテンツ」に古いコンテンツを追加する必要があります。コンテンツを追加する別の方法はありますか?
ありがとうパスキー
私はシェフと料理本の初心者です。クックブックを作成していて、ファイルの最後にコンテンツ (テキスト) を追加したいと考えています。現時点では、私は使用しています:
file "#{node['dir']}/#{params[:name]}.txt" do
content "my full text"
end
ただし、上書きされるため、常に「コンテンツ」に古いコンテンツを追加する必要があります。コンテンツを追加する別の方法はありますか?
ありがとうパスキー
これを行うために直接 Ruby を使用しないでください。これを処理するFileEditと呼ばれる Chef の組み込みクラスがあります。具体的には、おそらくinsert_line_if_no_match
.
必要に応じて、直接ルビーコードを使用できますか
open('myfile.out', 'a') do |f|
f << "and again ...\n"
end
必要に応じて、これは ruby_block プロバイダーで行うことができます。このリンクは、そのタイプのブロックの使用方法を説明しています
もう 1 つの方法は、ファイルの内容を読み込んで、それを現在のブロックの更新された文字列と連結することですか?
Ruby コードのみを使用する場合、chef は依存関係をチェックする前に、レシピの読み込み時にコンテンツを書き込みます。そして、間違いなく収束中ではありません。
ルビーとシェフの組み合わせがうまくいきます。
file = File.open(#{node['dir']}/#{params[:name]}.txt, "rb")
existingContents = file.read
newContents = existingContents + "my full text"
file "#{node['dir']}/#{params[:name]}.txt" do
content newContents
end
したがって、ロード時に文字列を作成し、その文字列をシェフに渡し、シェフが収束中の適切な段階で内容を変更できるようにするという考え方です。