chef
Berkshelf

Berkshelfを試してみる

More than 5 years have passed since last update.

社内でBerkshelfがウワサになっていたので試してみた。


Berkshelfとは?

Berkshelfとは、「Chefのcookbookとその依存関係を管理するツール」らしい。

http://berkshelf.com/

要するに、定義ファイルに使う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に置いてみた。

https://github.com/uchiunyo/chef-repo

使い方はこんな感じを想定している。

まずは事前準備。構築する環境は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ファイルに雛形を用意して使い分ける事によって

うまいこと管理できないかなーと思ってみた。

助言異論反論コメントなどあれば、頂けると嬉しいです。