humangas's blog

自分用のメモなので雑です。

入門Chef Solo:10-サービスを起動したい - Service と Notification

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

  • Package Resourceはインストールのみで、サービスの起動やOS起動時の登録は行われない
  • サービスの状態はService Resourceで記述する
  • Notification(通知)とServiceのResourceを組み合わせると、設定ファイルを更新したらreloadやrestartすることを実現できる

Service

action

RedHat系では/etc/init.d 以下のスクリプトが実行される。

:enable

OSブート時のサービス有効

:start

サービス起動(レシピ実行時)

supports

serviceで使用できるオプションの指定

restart => trueを指定しない場合、stop + start で代用される。 サービスによっては、stop + start のほかにもrestartで処理することがあるので、restartをサポートしているサービスではなるべくrestartを有効にする。

Notification と Service の組み合わせ

nginx.confが更新された場合にnginxサービスをreloadする例)

service "nginx" do
    supports :status => true, :restart => true, :reload => true
    action [ :enable, :start ]
end

template "nginx.conf" do
    path "/etc/nginx/nginx.conf"
    source "nginx.conf.erb"
    owner "root"
    group "root"
    mode 0644
    notifies :reload, 'service[nginx]'
end
  • notifiesは第一引数にアクション、第二引数にresource_type[resource_name]を記述する
  • resource_typeservicetemplateなどResourceの種類
  • resource_nameは自分でレシピ内に指定したResourceの名前
  • notifiesで指定できる通知先はserviceに限らないが、serviceがよく使われる

Notification のタイミング

デフォルトではNotificationの実行は遅延して行われる。いったんキューに入れられて、Chef全体の実行の限りなく終盤でキューから出されるので、通知を送る側はあまり順番を気にしなくてよい。キューに入れずに即時実行する場合はnotifiesの第三引数に:immediatelyを指定するが利用場面は少ない。

Subscribe - Notification の逆方向の通知

  • SubscribeはResourceに何かアクションをさせたいときに使う
  • Subscribeで実現できる動作はNotificationと全く同じで、通知の向きのみが異なる
  • Notification と Subscribe は記述するときに可読性の高い方を選択する