Chef-Zero勉強記録 その2 Berkshelfでサードパーティ製Cookbookを使う
はじめに
Chefの勉強記録です。その2です。第3回です(ややこしい)
前回はChefをインストールしたり、knife-zeroを使ってリモートホストを操作したり、簡単なレシピを作ってNginxをインストールできるようになったりしました。
(前回の記事はこちら)
今回はレシピの自作からは一旦離れて、Berkshelfなる仕組みについて学んでみます。
Berkshelfって何
大雑把に言うと、GemにとってのBundlerが、CookbookにとってのBerkshelfです。
たとえば、Berksfileというファイルに以下のように書きます。
source "https://supermarket.getchef.com" cookbook 'nginx'
これでNginx用のCookbookを取ってくることが出来ます。さらにその際には依存関係も自動的に解決してくれるとのこと。
Berksfileが、BundlerにおけるGemfileですね。
以下では実際にBerkshelfを導入して、いろいろとCookbookをインストールしてみます。
Berkshelfのインストール・・・は不要
前回インストールしたChefDKにはBerkshelfも含まれているため、改めてのインストールは不要です。
ためしにバージョン確認してみましょう。
$ berks -v 5.6.4
Berksfileを作る
前回作ったchef-repoディレクトリに、Berksfileを作ります。
$ vi Berksfile
中身を次のように編集してみます。
source "https://supermarket.getchef.com" cookbook 'yum-epel' cookbook 'git'
これでepelリポジトリとgitを追加するCookbookをインストールする準備ができました。
なお、Berkshelfで入手できるサードパーティ製のCookbookはこのサイトで検索できます。
Cookbookを取ってくる
先ほど作ったBerkshelfに基づいて、Cookbookをインストールします。
chef-repoディレクトリで以下を実行。
$ berks vendor cookbooks (いろいろインストールされたっぽいメッセージ) $ ls cookbooks README.md compat_resource example mingw ohai windows build-essential dmg git nginx seven_zip yum-epel
できたっぽい。
berks vendor
ではBerksfileに基づきCookbookをインストールします。インストール先は引数で指定したディレクトリですが、何も指定しなかった場合、デフォルトではberks-cookbooksがインストール先となるようです。
取ってきたRecipeの登録
前回と同様にrun_listに登録していきます。
$ knife node run_list add production_host 'recipe[yum-epel]' production_host: run_list: recipe[nginx] recipe[yum-epel] $ knife node run_list add production_host 'recipe[git]' production_host: run_list: recipe[nginx] recipe[yum-epel] recipe[git]
収束!
これも前回と同様。knife zero converge
するのです。
$ knife zero converge "name:production_host" -x vagrant (なんかいろいろメッセージ)
確認
②本番環境で結果を確認します。
$ git --version git version 1.8.3.1 $ yum repolist | grep epel * epel: ftp.riken.jp epel/x86_64 Extra Packages for 7 - x86_64 11,847
入ってるっぽい!
おわりに
非常にざっくりですが、Berkshelfを使ってサードパーティ製のCookbookをインストールしてみました。
今回はインストールしたCookbookをすぐにknife zero converge
しました。諸々の設定まで自動化するには、もちろんもっと手を加える必要があります。
というわけで、次回以降はレシピファイルの書き方に焦点を当てて勉強していきたいと思います。