前提
- Rubyがインストールされている
- VagrantがインストールされていてVirtualboxが起動している
- Chef, Knifeがインストールされている
手順
knifeコマンドを使ってcookbookなどを格納するリポジトリを作成する。
knife solo init chef-repo
NodeをChef対応にする。
knife solo prepare vagrant@192.168.33.10
prepareの後に指定するのはVagrantで作ったVirtualboxのホスト名もしくはIPアドレス。このコマンドでChefがNodeにインストールされて、Cookbookを使って操作をすることができる。@の前はユーザーID。Vagrantではデフォルトのユーザーはvagrant、パスワードもvagrant。
cookbookを作成する。
knife cookbook create hello -o site-cookbooks/
“hello”はcookbook名。-o以下はcookbookを作成する場所。自分で編集するcookbookはsite-cookbooks以下に作成する。インターネット上で利用できるcookbookはcookbooksに保存する。これはお約束事。
site-cookbooks/helloに移動する。
cd site-cookbooks/hello
recipes/default.rbを編集する。
# # Cookbook Name:: hello # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # log "Hello World"
chef_repo/nodes/192.168.33.10.jsonを編集する。
{"run_list":[ "recipe[hello]" ]}
レシピをノードに適用する。
$ knife solo cook vagrant@192.168.33.10 Running Chef on 192.168.33.10... Checking Chef version... Enter the password for vagrant@192.168.33.10: Uploading the kitchen... vagrant@192.168.33.10's password: vagrant@192.168.33.10's password: vagrant@192.168.33.10's password: vagrant@192.168.33.10's password: vagrant@192.168.33.10's password: vagrant@192.168.33.10's password: vagrant@192.168.33.10's password: vagrant@192.168.33.10's password: Generating solo config... vagrant@192.168.33.10's password: Running Chef... Starting Chef Client, version 11.8.0 Compiling Cookbooks... Converging 1 resources Recipe: hello::default * log[Hello World] action write Chef Client finished, 1 resources updated
パスワードを繰り返し聞かれるので毎回パスワードを入力する。一見するとメッセージが戻ってこないので処理がスタックしているように見えるが、実際には裏で進んでいる。