chef とは ? †
- サービスの自動構成ツール
- = サービスを全て Chef で構成すれば、Chef の設定内容は、サービスの状態を示すスペックノートになる
- 用語
- レシピ : サービスのインストール手順
- クックブック : レシピ + データ・ファイル
- キッチン : クックブックの格納場所
- システム一種類につきキッチン1つ
- キッチンはレポジトリとも呼ばれる
インストール †
- chef
[~]$ mkdir chef-hello
[~]$ cd chef-hello/
[~/chef-hello]$ sudo gem install chef
Password:
Successfully installed chef-11.8.2
Parsing documentation for chef-11.8.2
1 gem installed
- knife (ツール)
[~/chef-hello]$ knife configure
- knife の設定内容は ~/.chef/knife.rb
Hello Cookbook †
レポジトリの作成 †
[~/chef-hello]$ git clone git://github.com/opscode/chef-repo.git
Cloning into 'chef-repo'...
remote: Reusing existing pack: 223, done.
remote: Total 223 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (223/223), 46.09 KiB | 0 bytes/s, done.
Resolving deltas: 100% (56/56), done.
Checking connectivity... done
[~/chef-hello]$ tree
.
└── chef-repo
├── LICENSE
├── README.md
├── Rakefile
├── certificates
│   └── README.md
├── chefignore
├── config
│   └── rake.rb
├── cookbooks
│   └── README.md
├── data_bags
│   └── README.md
├── environments
│   └── README.md
└── roles
└── README.md
7 directories, 10 files
[~/chef-hello]$
クックブックを作る †
[~/chef-hello]$ cd chef-repo/
[~/chef-hello/chef-repo]$ knife cookbook create hello -o cookbooks
** Creating cookbook hello
** Creating README for cookbook: hello
** Creating CHANGELOG for cookbook: hello
** Creating metadata for cookbook: hello
[~/chef-hello/chef-repo]$ tree cookbooks/
cookbooks/
├── README.md
└── hello
├── CHANGELOG.md
├── README.md
├── attributes
├── definitions
├── files
│   └── default
├── libraries
├── metadata.rb
├── providers
├── recipes
│   └── default.rb
├── resources
└── templates
└── default
11 directories, 5 files
[~/chef-hello/chef-repo]$
- レシピ ~/chef-hello/chef-repo/cookbooks/hello/recipes/default.rb
#
# Cookbook Name:: hello
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
log "Hello Chef!"
- 実行設定ファイル ~/chef-hello/chef-repo/localhost.json
// localhost.json
{
"run_list" : [
"recipe[hello]"
]
}
実行するレシピを定義。knife-solo なら、自動で作ってくれる
- 環境設定ファイル ~/chef-hello/chef-repo/solo.rb
# solo.rb
file_cache_path "/tmp/chef_solo"
cookbook_path ["/Users/atsushi/chef-hello/chef-repo/cookbooks"]
実行環境を定義。knife-solo なら、自動で作ってくれる
実行 †
[~/chef-hello/chef-repo]$ sudo chef-solo -c solo.rb -j ./localhost.json
Password:
Starting Chef Client, version 11.8.2
Compiling Cookbooks...
Converging 1 resources
Recipe: hello::default
* log[Hello Chef!] action write
Chef Client finished, 1 resources updated
Chef