会社ブログ用に書いた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
問題点
- バックエンド回りのパッケージがインストールされていない
- symfonyレシピにすべてを記述している
- 内部でディレクトリ名、ユーザ名など可変であるべき値をベタ書いている
問題点1 バックエンド回りパッケージのインストール
mysql、memcached、mongodbのインストールレシピを追加しました。
パッケージのインストールとサービス起動設定のみを行っております。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に記述する事で
こんな感じに利用する事ができます。
次回はこのレシピを使って何をやったかを書きます!