13

特定の構成ファイルに複数行 (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 パターンかどうかはわかりません。

4

5 に答える 5

5

私はこのようなことをしました:

monit_overwrites/templates/default/monitrc.erb:

#---FLOWDOCK-START
set mail-format { from: monit@ourservice.com }
#---FLOWDOCK-END

私のレシピでは、これを行いました:

monit_overwrites/recipes/default.rb:

execute "Clean up monitrc from earlier runs" do
  user "root"
  command "sed '/#---FLOWDOCK-START/,/#---FLOWDOCK-END/d' > /etc/monitrc"
end

template "/tmp/monitrc_append.conf" do
  source "monitrc_append.erb"
end

execute "Setup monit to push notifications into flowdock" do
  user "root"
  command "cat /tmp/monitrc_append.conf >> /etc/monitrc"
end

execute "Remove monitrc_append" do
  command "rm /tmp/monitrc_append.conf"
end
于 2014-05-29T12:07:40.973 に答える