Chef-Serverを使ってみる(1)

今回は、前回構築したchef-serverを使ってみようと思います。

chef-serverにレシピを登録

まずはchef-serverにレシピを登録してみます。
最初にchef-soloでもやったchef-repoを作ります。
今回は/dataにchef-repoを作ります。

$ sudo su -
# mkdir /data/chef
# chown chef:chef /data/chef
# cd /data/chef
# su -c 'git clone git://github.com/opscode/chef-repo.git' chef

次にknifeの設定。

# sudo su - chef
$ bash
$ knife configure
WARNING: No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb] /data/chef/.chef/knife.rb
Please enter the chef server URL: [http://starmp-dev-chef-01:4000] http://localhost:4000
Please enter an existing username or clientname for the API: [www] chef
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem] 
Please enter the path to a chef repository (or leave blank): /data/chef/chef-repo

そしてCOOKBOOKを作成。

$ knife cookbook create Ec2Base -c /data/chef/.chef/knife.rb
** Creating cookbook Ec2Base
** Creating README for cookbook: Ec2Base
** Creating metadata for cookbook: Ec2Base
$ ls /data/chef/chef-repo/cookbooks/
Ec2Base  README.md

レシピを/data/chef/chef-repo/cookbook/Ec2Base/recipes/initial.rbに登録します。
今回登録するレシピは前回作成したものを使います。

作ったCOOKBOOKをサーバにアップロード

ここからが初体験。
作ったCOOKBOOKをchef-serverにアップロードしてみます。

$ knife cookbook upload -a -o /data/chef/chef-repo/cookbooks -c /data/chef/.chef/knife.rb 
ERROR: Your private key could not be loaded from /data/chef/.chef/chef.pem
Check your configuration file and ensure that your private key is readable

はい、だめー。

サーバとの通信用に鍵交換などをする必要があるっぽいです。
ちょっと調べてみるとknife configure -iで設定するっぽいのでもう一度knifeの設定をやり直します。

$ knife configure -c /data/chef/.chef/knife.rb -i
Overwrite /data/chef/.chef/knife.rb? (Y/N) y
Please enter the chef server URL: [http://server-01:4000] http://localhost:4000
Please enter a clientname for the new client: [www] knife
Please enter the existing admin clientname: [chef-webui] 
Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem] 
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem]  
Please enter the path to a chef repository (or leave blank): /data/chef/chef-repo
Creating initial API user...
Created client[knife]
Configuration file written to /data/chef/.chef/knife.rb

設定に成功していればknife client listでchef-serverのclient一覧が出るようなのでやってみます。

$ knife client list
  chef-validator
  chef-webui
  cilent-test
  knife

できたー。

それではさっそくCOOKBOOKをアップロードします。

$ knife cookbook upload -a -o /data/chef/chef-repo/cookbooks -c /data/chef/.chef/knife.rb 
Uploading Ec2Base             [0.0.1]
upload complete

できました。

knife cookbook listで確認してみます。

$ knife cookbook list
Ec2Base   0.0.1

登録されています。

Roleの登録

次にこのレシピを使うRoleの設定をしてみます。
今回はknifeを使ってchef-serverのrole設定をしてみます。

$ export EDITOR=vi
$ knife role create web

{
  "json_class": "Chef::Role",
  "name": "web",
  "env_run_lists": {
  },
  "description": "Web Server",
  "chef_type": "role",
  "override_attributes": {
  },
  "default_attributes": {
  },
  "run_list": [
    "recipe[initial]"
    "recipe[Ec2Base::initial]"
  ]
}

登録されているか確認します。
※追記:run_listの書き方が間違っていましたので訂正しました。
書式はrecipe[COOKBOOK::RECIPE]でした。
recipeがdefault.rbの場合はrecipe[COOKBOOK]でOK。

$ knife role show web
chef_type:            role
default_attributes:   
description:          Web Server
env_run_lists:        
json_class:           Chef::Role
name:                 web
override_attributes:  
run_list:             recipe[initial]

今回はここまで。
次回はNodeを登録して、実際にRecipeを反映させてみたいと思います。

chefたのしー!knifeサイコー!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です