社内でBerkshelfがウワサになっていたので試してみた。
Berkshelfとは?
Berkshelfとは、「Chefのcookbookとその依存関係を管理するツール」らしい。
要するに、定義ファイルに使うcookbookを定義しておけば、リポジトリから勝手に依存関係を解消した上で
落としてきてくれるらしい。RubyのBundlerみたいな感じ。
同じようなので、Librarian-Chefというのもあるが、Berkshelfの方が現時点で主流っぽい。
Berkshelfの使い方
Berkshelfはgemで配布されているので、gem installでインストールできる。
$ gem install berkshelf
使用したいcookbookを定義するBerksfileを作成する。
Berkshelfの公式サイトにも書いてあるが、opscodeからmysqlとnginxのcookbookを使う場合はこんな感じ。
cookbookのmetadata.rbに定義された依存パッケージもあわせて落としてくれる。
$ cat Berksfile
site :opscode
cookbook 'mysql'
cookbook 'nginx', '~> 0.101.5'
こんな感じでgithubから持ってくる事も出来る。
cookbook "zabbix2.0", git: "https://github.com/uchiunyo/chef-zabbix2.0.git"
cookbookはberksコマンドで落としてくる。Berksfileにzabbixのcookbookを定義して実行した。
$ berks --path=vendor/cookbooks
Installing zabbix2.0 (0.1.0) from git: 'https://github.com/uchiunyo/chef-zabbix2.0.git' with branch: 'master' at ref: 'c201bba54ef606b040dcdb057397faafca870913'
Using yum (2.2.2)
ちゃんと依存パッケージであるyumもopscodeから落としてきてくれていた。
$ ls vendor/cookbooks
yum zabbix2.0
後はいつもどおり.jsonにcookbookを定義してchefを実行すればOK!!
Berkshelf + knife-soloを使ったchef-repoを考えてみる
じゃあBerkshelfを使ってどんな感じにchef-repo構成すればやりやすいかなーと考えてみた。
ちなみにchefの実行はknife-soloを使っているので、その辺りも考慮したい。
とりあえずこんな感じかな?というのをgithubに置いてみた。
使い方はこんな感じを想定している。
まずは事前準備。構築する環境はvagrantのCentOS6.4(vmcent1)にZabbix2.0 Serverを構築する。
githubからchef-repo持ってきて、bundle installでchef-soloとかknife-solo,Berkshelfを用意する。
$ git clone https://github.com/uchiunyo/chef-repo.git
$ cd chef-repo
$ bundle install --path=vendor/bundle
そしてberksを実行してgithubよりcookbookと、依存cookbookを落としてくる。
$ bundle exec berks --path=vendor/cookbooks
ではvmcent1にZabbix2.0 Serverを構築する。
まずはknife-solo prepareでchefをインストールする。
$ bundle exec knife solo prepare vmcent1
.chefから、構築したい構成の.jsonを選択し、nodesの中にコピーする。
今回はZabbix-ServerのDBにローカルのMySQLを使うので、zabbix_db_local.jsonを使う。
$ cp .chef/zabbix_db_local.json nodes/vmcent1.json
vmcent1でchefを実行する。
$ bundle exec knife solo cook vmcent1
Zabbix Serverの出来上がり!!って感じです。
こんな感じで使いたいcookbookはガシガシBerksfileに書いて、.jsonファイルに雛形を用意して使い分ける事によって
うまいこと管理できないかなーと思ってみた。
助言異論反論コメントなどあれば、頂けると嬉しいです。