humangas's blog

自分の振り返りを適当に書いてます。書きっぷりはそん時の気分によって変わります。

入門Chef Solo:08-代表的なレシピのサンプルが見たい - td-agentのレシピを読む

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

目的:レシピを記述するためにResourceの詳細を見ていく前に、overviewする。

サンプルに使用するtd-agent:

td-agentのレシピを見てみよう

レシピでやっていること:

  • td-agentグループを作る
  • td-agentユーザーを作る
  • /etc/td-agent/ ディレクトリを作る
  • td-agent配布用のサイトをaptソースもしくはyumリポジトリに追加する
  • td-agentの設定ファイルをテンプレートから作成して設置する
  • td-agentパッケージをインストールする
  • td-agentサービスを有効にする

ポイント

一般的なRPMやdebパッケージは、ユーザー作成そのほかを実行してくれる。このレシピは「シンタックスの参考」としてレビューする。

グループを作る、ユーザーを作る、ディレクトリを作る

ポイント

Chefのレシピは上から順に逐次実行されていくので、先に定義した処理は既に実行されている前提でレシピを書いていく。

パッケージの配布サイトを登録する

レシピで対応させるプラットフォームごとに、パッケージの取得先をcaseを使って分岐する。
Resouceとしてapt_repositoryyum_repositoryが用意されているので、プラットフォームによって使い分ける。

AttributeとOhai

Ohaiを使ってAttributeに設定された値を取り出す。
Chefで使用する場合はnode[:platform]などと書いて取得する。

テンプレートから設定ファイルを作る

3章の入門Chef Solo:03-nginxをChef Soloで立ち上げたいを参照する。

パッケージtd-agentをインストール

Package Resourceを使ってインストールする。該当プラットフォームのパッケージシステムを自動的に調べて実行してくれる。aptかyum。
actioninstallではなくupgradeを指定すると、レシピ実行時に最新版にアップデートされる。

サービスを起動する

:enableはOS起動時のサービスとして登録
:startはすぐにサービスを起動

subscribes :restart, resources(:template => "/etc/td-agent/td-agent.conf")はテンプレートファイルが更新されていたら:restartアクションを実行する記述。

オフィシャルドキュメントを参照しよう

公式のResourceのドキュメント
About Resources and Providers - Chef Docs

なんで"Resource"?

レシピに書くのは、それを実行した結果のリソースの状態であるから。
「Chefはサーバーの状態を管理し収束させるためのフレームワークである」

Chefの思想

What Is Chef?