会社ブログ用に書いたchefのレシピをリファクタしてみた。

会社の技術ブログで「vagrant + chef + serverspecを使った~」みたいな記事を書きました。
その際のchefのレシピはいくつか問題点があると思ってます。
今回はその問題点を解消すべくリファクタしてみた!っていうお話です。

会社ブログの記事

http://tech.voyagegroup.com/archives/7141452.html

会社ブログのchefのレシピ(リファクタ前)

https://github.com/taka512/techblog20130523/tree/master/chef

リファクタしたchefのレシピ(リファクタ後)

https://github.com/taka512/chef-develop/tree/myblog20130620

問題点

  1. バックエンド回りのパッケージがインストールされていない
  2. symfonyレシピにすべてを記述している
  3. 内部でディレクトリ名、ユーザ名など可変であるべき値をベタ書いている


問題点1 バックエンド回りパッケージのインストール

mysqlmemcachedmongodbのインストールレシピを追加しました。
パッケージのインストールとサービス起動設定のみを行っております。mongodbは以下のように10genのレポジトリを追加してそこからインストールしています。


問題点2 symfonyレシピの分割

会社ブログのレシピでは時間的に動作させるのが精一杯だったので「旧symfonyレシピ」で一括して以下の事を行っていたのを分割しました。

処理 分割後receipt
1 sshの設定 server
2 ntpの設定 server
3 iptableの設定 server
4 ユーザの追加・ディレクトリの作成 server
5 nginxのインストールと設定 nginx
6 パッケージのインストール server
7 symfonyのインストール symfony
8 アプリケーションディレクトリ symfony


問題点3 attributeの追加

変更前のレシピでは、ユーザ名等をベタ書きしていたため、値を変更しようとしても複数の箇所を書き換える必要がありました。chefでは値を変数として扱うattribute機能がありますのでattribute化しました。
例えば以下のようにnode/xxxx.jsonに記述する事で

こんな感じに利用する事ができます。

次回はこのレシピを使って何をやったかを書きます!