特定の構成ファイルに複数行 (20 ~ 30 行) を追加する Chef レシピを作成しようとしています。
ファイルに追加するだけでなく、構成ファイル全体を変更することが推奨されるパターンであることは承知していますが、複数の理由からこのアプローチは嫌いです。
これまでのところ、私が見つけた唯一の解決策は、 acookbook_file
を使用してから bash リソースを使用して行うことでした:
cat lines_to_append >> /path/configfile
明らかに、chef-client を実行するたびにファイルが何度も追加されるため、これは適切に機能しません。最初に特定の文字列をチェックする小さな bash スクリプトを作成し、見つからない場合はファイルに追加する必要があります。
しかし、これは Chef を使用する目的に反しているようです。もっと良い方法があるはずです。
有望な解決策の 1 つは、OpsCode Communityのline cookbookでした。この正確な問題を解決することを目的としていました。残念ながら、機能は不完全でバグが多く、コードは簡単なハックにすぎません。確実な解決にはほど遠い。
私が評価した別のオプションはaugeas でした。かなり強力に見えますが、システムにさらに別の抽象化レイヤーを追加することになります。私の場合、やり過ぎです。
これがシステム管理者にとって最も明白なタスクの 1 つであることを考えると、私が見ていない Chef を使用した簡単で美しいソリューションはありますか?
編集:これまでのところ、私がそれを解決する方法は次のとおりです。
cookbook_file "/tmp/parms_to_append.conf" do
source "parms_to_append.conf"
end
bash "append_to_config" do
user "root"
code <<-EOF
cat /tmp/parms_to_append.conf >> /etc/config
rm /tmp/parms_to_append.conf
EOF
not_if "grep -q MY_IDENTIFIER /etc/config"
end
動作しますが、これが推奨される Chef パターンかどうかはわかりません。