【Chef Tips 1】 カーネルパラメータの設定(sysctl.conf)
ファイルを編集する場合、主にTemplateリソースを使用する。しかし、一部の定義のみ入れ替えたい、ファイルを丸ごと入れ替えたくない、といった場合には、ruby_block+FileEditユーティリティが役立つ。
以下は、”net.core.somaxconn"(カーネルがキューイング可能なパケットの最大個数)が定義されていなかった場合、ファイルの最終行に定義を追加、最後にリロードするというもの。
ruby_block "Edit /etc/sysctl.conf" do block do rc = Chef::Util::FileEdit.new("/etc/sysctl.conf") rc.insert_line_if_no_match(/^net.core.somaxconn.*$/, "net.core.somaxconn = 1000" rc.write_file end notifies :run, "execute[Reload /etc/sysctl.conf]" end execute "Reload /etc/sysctl.conf" do command "sysctl -p" action :nothing end |
■ ポイント
- "rc = ~"の”rc"は任意の文字列
- ”insert_line_if_no_match”の部分のメソッドには、いくつかの種類がある。詳しくはこちらを参照。
- Chefのバグで、"insert_line_if_no_match"を2回以上使うと、最初のものしか有効にならない。そのほかのメソッドについては、何回でも使用可能。
- "/^net.core.somaxconn.*$/"の部分は、マッチングさせたい条件を"/"で囲まれた部分にRubyの正規表現で記述する。
- ruby_blockの後の""には、任意の文字列を設定できるが、ランリスト中の他の名称と重複しないようユニークにする。そうしないとコンパイルで警告となる。