Chef で設定ファイル編集の template/cookbook_file と sed の使い分け

Chef を使い始めた頃からちょっと引っかかっていたことなのですけど、インストールするパッケージの設定ファイル等の作成・編集を template/cookbook_file リソースで行うか、bash/execute 等のリソースで sed を使って置換して行うかという課題。現在は一応自分の方針がまとまって、以下の方針で使い分けるようにしていますので軽くまとめ。

スポンサーリンク

常時起動させるサービスの設定ファイルは template/cookbook_file リソース

設定ファイルを変更した後に、reload や restart が必要なパッケージの場合は、template/cookbook_file を使うようにしています。つまり chkconfig on にしてサービスとして起動させるパッケージの場合は、必ず template か cookbook_file リソースのどちらかで設定ファイルを作成する。

template/cookbook_file リソースを使うと、notifies オプションを指定することで、設定ファイルが更新された際に簡単にサービスを restart, reload させることができるためです。常時起動のサービスとして利用するパッケージの場合は、デフォルトの設定ファイルから僅かな変更しかしない場合でも、必ず template か cookbook_file リソースを使うようにしています。

また、サービスとして常時起動させないパッケージでも、デフォルトの設定ファイルから変更箇所が多い場合は、template/cookbook_file を使ったほうが楽です。それから、変数で値を指定したい箇所のある設定ファイルの場合は、template リソースを使う。

これらの場合、仮想マシンにインストールしたパッケージのデフォルトの設定ファイルを、scp コマンドで丸ごとダウンロードする等を行ってからローカルで編集するようにしています。vagrant sandbox on で rollback できるようにして、パッケージをインストール → デフォルト設定ファイルをゲット → vagrant sandbox rollback とかすると楽です。

サービスでないパッケージの簡単な設定変更は sed

それ以外、サービスのパッケージではない場合で設定ファイル等の簡単な変更の際は、bash や execute リソースで sed で置換するのがお手軽です。1行、2行の変更で、わざわざ template/cookbook_file を用意するのは面倒臭い…という場合は、bash/execute で sed を使ってやるようにしています。この場合、not_if, only_if のガードを忘れないようにする。

このエントリーを書いている途中で見つけたのですが、sed 的なことは Chef::Util::FileEdit を使ってもできるらしいです。今度試してみよう。

Chefのレシピでsed的な事を実施 – Qiita

以上、小ネタでした。

スポンサーリンク
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!