Chefのrecipeを書いてみる その1 -とりあえずrecipeを書いてみる編-
Chefのcookbookを順を追って,説明しながら書いていこうと思います. 最初はナイーブにインストールすることを目標として,次にrecipeを分けてみたり,attributeを設定してみたりします. 今回はナイーブにインストールするところまで.
インストールするものは特になんでもいいんですが,丁度インストールしようとしていたので,flyway-cliのrecipeを書こうとおもいます. FlywayやEvolutions などのDB(Scheme)マイグレーションツールについては前回を参照.
cookbookを書いてみた
chefのrepositoryを準備する
まず,chefのcookbookやノードファイルを置くrepositoryを準備します.
git clone git://github.com/opscode/chef-repo.git cd chef-repo knife configure
cookbookを作成
早速,cookbookのひな形を作成します.本当は自作したcookbookはsite-cookbooks
に入れるんだけど,今回はcookbooks
で.
sudo knife cookbook create flyway-cli -o cookbooks sudo knife cookbook create [cookbook名] -o [cookbookを配置するディレクトリ]
git で管理
必要であればgit
でcookbookを管理しましょう.
git init git add . git commit -m 'First commit'
recipeを書く
先ほど作成したcookbookの中に移動します.
とりあえず,recipes/default.rb
にflyway-cli
をインストールするrecipeをナイーブに書いていきます.
今回はシェルスクリプトだけでできるのでexecute
を使います.
このexecute
の部分に記述するものをresource
と呼びます.
基本的な流れは,次の通り.
wget
でファイルのダウンロードtar
で解凍ln
でシンボリックリンクを作成execute
:sh -c
でcommandを実行するcommand
: ここに実行したいshllスクリプトを記述する<<-EOC
: Rubyにおけるヒアドキュメント(キーワードはEOCじゃなくてもいい)
execute "flyway-cli" do command <<-EOC wget http://repo1.maven.org/maven2/com/googlecode/flyway/flyway-commandline/2.2.1/flyway-commandline-2.2.1.tar.gz -P /tmp tar xzfC /tmp/flyway-commandline-2.2.1.tar.gz /opt ln -s /opt/flyway-2.2.1 /opt/flyway EOC end execute "mysql-connector" do command <<-EOH wget http://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.26.tar.gz -P /tmp tar xzfC /tmp/mysql-connector-java-5.1.26.tar.gz /opt/flyway/jars EOH end
solo.rbの作成
先ほど作成したchef-repoに戻ります.
chefでダウンロードしたファイルを置いておくfileキャッシュのディレクトリと,cookbookを配置しておくcookbooksディレクトリをsolo.rb
に記述することが出来ます.
file_cache_path "/tmp/chef-solo" cookbook_path [File.expand_path("./cookbooks", __FILE__)]
ノードファイル localhost.jsonの作成
chef-repoにlocalhost.json
を作成します.
ノードとはchefを実行してセットアップするコンピュータのことを指します.
このファイルはJSONで記述します.run_list
のArrayにrecipeを追加していくことで,chef-soloを実行した時に走らせるrecipeを指定することが出来ます.
{ "run_list" : [ "recipe[flyway-cli]" ] }
chef-soloの実行
chef-repoディレクトリでchef-soloを実行します.
sudo chef-solo -c solo.rb -j ./localhost.json
以下のコマンドを実行してUsageが表示されればひとまず完了です.
sudo /opt/flyway/flyway
続きはまた明日.
Chefのrecipeを書いてみる一覧
- Chefのrecipeを書いてみる その1 -とりあえずrecipeを書いてみる編-
- Chefのrecipeを書いてみる その2 -recipeからインストールするversionを指定してみる編-
- Chefのrecipeを書いてみる その3 -recipeを分割してみる編-
- Chefのrecipeを書いてみる その4 -インストール済みの場合は実行しないようにしてみる編-
- Chefのrecipeを書いてみる その5 -変数をAttribute化してみる編-