Berkshelfを試してみる

  • 225
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

社内で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ファイルに雛形を用意して使い分ける事によって
うまいこと管理できないかなーと思ってみた。

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