初めてのChef
Chef を使ってみます。 Vagrant で環境をつくっておいてそこで色々試してみます。
今回はゲスト側でクックブック、レシピを作って実行してみます。
Chef のインストール
vagrant ssh
で Vagrant の環境に入って Chef をインストールする
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
...
Thank you for installing Chef!
Chef Solo がインストールされているか確認
$ chef-solo -v
Chef: 12.5.1
クックブックを作る
Chef をインストールすると knife
というコマンドもインストールされる。
この knife
コマンドを使ってクックブックを作る
今回は git をインストールするための git クックブックを作る
コマンドは以下のように指定する
knife cookbooks create [クックブック名]
今回は出力先を指定する -o
オプションを指定
$ sudo knife cookbook create git -o /var/chef/cookbooks
このコマンドで git という名前のクックブックが作成され、 /var/chef/cookbooks/git/recipes/default.rb
にレシピの雛形が作られる
レシピの編集
レシピの雛形に git をインストールするレシピを書く
$ sudo vi /var/chef/cookbooks/git/recipes/default.rb
$ cat /var/chef/cookbooks/git/recipes/default.rb
#
# Cookbook Name:: git
# Recipe:: default
#
# Copyright 2015, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
package "git" do
action :install
end
クックブックの実行
作成したクックブックを実行する
$ sudo chef-solo -o git
...
Compiling Cookbooks...
Converging 1 resources
Recipe: git::default
* yum_package[git] action install
- install version 1.7.1-3.el6_4.1 of package git
Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 38 seconds
git がインストールされたか確認
$ git --version
git version 1.7.1
Chef の特徴
OS の違いを吸収してくれる
上記 git の例ではこちらで指定していないにも関わらず、実行した環境が CentOS であることを解釈して yum パッケージでインストールが行われた
実行された環境の OS 毎の違いを吸収してくれる
冪等性が担保されている
先ほどのクックブックをもう一度実行してみる
$ sudo chef-solo -o git
...
Chef Client finished, 0/1 resources updated in 07 seconds
今回は何もせずに正常に終了したことが分かる
Chef ではクックブックを何度実行しても、クックブックに規定された状態になる冪等性が担保されている
参照
余談: Chef に関する記事は web 上にも色々ありますが、 Chef は用途によって様々なツール、使い方があり、基本的な用語や概念などを理解できていないと思わぬところでハマってしまいがちです。 Chef 実践入門 は Chef に関して体系的に理解できるので最初にサラッと読んでしまうのが近道だと感じました。