Posted at

The Berkshelf Way

More than 3 years have passed since last update.

Berkshelfのissueで結構重要なことが書いている(気がした)ので、簡単にまとめておく(間違ってる箇所あったら編集リクエスト下さい)。元々The Berkshelf Wayはyoutube動画の方のスライドのタイトルだけど、ここに書いてある内容にも合ってる気がしたので、同じタイトル付けてみた。

How to use Berkshelf to manage Organization repo like the Librarian-chef does? #535


Cookbookのあるべき姿

Berkshelfのコアチームはcookbookの以下の様にあるべきだと思っている.


  • 各cookbookは個別のGitリポジトリに格納され、全てのcookbookが個々のBerksfileを持つべき

  • 各cookbookに対してCIサーバ上にビルドジョブを作成し、そのジョブの中でテストを行った上でChef Serverにアップロードすべき

  • 各cookbookを1つのソフトウェアのプロジェクトと考えるべき

  • 全てのcookbookをchef repoに突っ込むという考えは捨てるべき


    • 全てのcookbookを1つのリポジトリに入れるという事は単一責務を破壊する行為

    • commit historyが読みづらくなるし、全てのデベロッパーが全てのcookbookにアクセス出来るという前提を置いた考え方になっている(1つのリポジトリに全てのcookbookがあるということは)



https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18246039

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18123272

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-98868265


CookbooksのないChef Repo

chef-repoに含めるべきものは以下


  • environments

  • data bags

  • roles (berkshelfのメンバーはroleは使うなと言っているので、もしどうしても使うならくらいのもの)

ここにcookbooksディレクトリは 含まれない

chef-repoをcookbookをchef-serverにアップロードする場所として使う為にBerksfileを置くのはあり。Berksfileに自分のインフラで使用するcookbookを記載して、berks uploadでchef serverにアップロードしたりberks packageでパッケージするのに使える。但し、chef-repoをcookbookを開発する場所として使うべきではない。

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18300649

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-29508430

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-29533429


その他


chef-repo使わない場合knife.rbはどこに置くの?

~/.chef/knife.rbに置きなされ

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18415517


chef-serverを複数使う場合はそれじゃ無理なんだけど?

knife-blockを使ってみなよ

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18462031


cookbook毎にリポジトリを作る構造の利点


  • berkshelfがそれを想定した作りになっているので、berkshelfを使って作業しやすい

  • 多くの人がこの方法をとるので、助けを得やすい

  • cookbookとgit tagを一致させられる(それを助けるツールもある)

  • 全てのcookbookが同じ構造なので汎用的なビルドジョブを作る事が可能

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-98886945


お前らのApplication CookbookとLibrary Cookbookは間違っている


Application Cookbook

Application cookbookはアプリケーションをインストールし設定するcookbookのことを指す。例えばmy-webappというアプリケーションがあるとした時に、そのcookbookがNGINXのcookbookに依存していたとしてもNGINXのcookbookをLibrary Cookbookとは呼ばない。NGINXのcookbookもまたアプリケーションcookbook。


Library Cookbook

LWRPや定義だけのCookbookのことをLibrary Cookbookと言う。通常Library cookbookはレシピを含まない。

https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18315530


リンク

The Berkshelf Way - Youtube

The Berkshelf Way - Slideshare

How to use Berkshelf to manage Organization repo like the Librarian-chef does? #535