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

前回は、Recipeの登録と、Roleの登録をしたので、今回はいよいよもう一台サーバを用意して、Recipeの適用をしてみたいと思います。

Nodeの登録

まずはNode登録から。
以下のコマンドでノードを登録します。
ついでにRoleも設定します。

knife node create node01

{
  "chef_environment": "_default",
  "normal": {
  },
  "run_list": [
    "role[front]"
  ],
  "name": "node01"
}

確認してみます。

$ knife node show mode01
Node Name:   node01
Environment: _default
FQDN:        
IP:          
Run List:    role[front]
Roles:       
Recipes:     
Platform:

Node用のClientの作成

Node側の設定の前にNode用のClientを作っておきます。
ちょっと混乱してしまったのですが、Clientとはchef-clientのことで、Chef-Serverとお話しするインタフェースのことです。

  • WebUI用Client
  • knife用Client
  • Node用Client

あたりを用意しておけば良いのかなと思います。
今回はNode用Clientを作ります。
clientの作成はいつものknifeで。

$ export EDITOR=vi
$ knife client create client01 -c /data/chef/.chef/knife.rb
※とくに修正せずに保存
Created client[client02]
-----BEGIN RSA PRIVATE KEY-----
.
.
.
-----END RSA PRIVATE KEY-----

これでClient作成完了。
作成時に出力されたPrivate Keyは大事に保管しておきましょう。

Node側の設定

Chef-ServerにNodeの登録とNode用Clientができたので、ノードのサーバにchef-clientを設定します。
まずはお約束のruby-gemsとruby-develをyumでインストール。

$ sudo yum install -y rubygems.noarch ruby-devel.x86_64

そして、gemでchefをインストール。

$ sudo gem install chef

chef-clientの設定

まずはchef-clientの設定を行います。
knifeを使って設定のひな形を作ります。

$ sudo knife configure client /etc/chef
WARNING: No knife configuration file found
Creating client configuration
Writing client.rb
Writing validation.pem

これで/etc/chefclient.rbvalidation.pemができますので、できたclient.rbを自分の環境に変更します。
僕はChef Configuration Settingsを参照しながら、以下のように修正してみました。

$ sudo vi /etc/chef/client.rb

log_level        :info
log_location     STDOUT
chef_server_url  'http://chef-server:4000'
validation_client_name 'client01'
node_name node01

validation.pemの配置

そして、/etc/chef/validation.pemを配置します。
validation.pemはclient.rbのvalidation_client_nameで設定したclientのPrivate Keyです。
chef-serverでNode用clientのclient01を作成したときに保管したPrivate Keyを/etc/chef/validation.pemというファイル名で配置します。

これで準備完了のはずなので、node01でchef-clientを実行してみます。

$ sudo chef-client
INFO: *** Chef 0.10.8 ***
INFO: Client key /etc/chef/client.pem is not present - registering
INFO: HTTP Request Returned 403 Forbidden: You are not allowed to take this action.
FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
FATAL: Net::HTTPServerException: 403 "Forbidden"

「403 Forbidden」と言われてしまった。
chef-server側のログを見てみます。

$ view /var/log/chef/server.log

merb : chef-server (api) : worker (port 4000) ~ Params: {"format"=>nil, "controller"=>"nodes", "action"=>"show", "id"=>"node01"}
merb : chef-server (api) : worker (port 4000) ~ {:action_time=>0.001098, :after_filters_time=>1.6e-05, :before_filters_time=>7.0e-05, :dispatch_time=>0.008263}
merb : chef-server (api) : worker (port 4000) ~
merb : chef-server (api) : worker (port 4000) ~ Started request handling: Fri Apr 27 00:15:40 +0000 2012
merb : chef-server (api) : worker (port 4000) ~ Params: {"controller"=>"clients", "action"=>"create", "name"=>"node01", "admin"=>false}
merb : chef-server (api) : worker (port 4000) ~ You are not allowed to take this action. - (Merb::ControllerExceptions::Forbidden)

なんかNodeをcreateしようとして”You are not allowed to take this action.“と言われている様子。
すでにNodeは登録しているのにcreateするのはよくわかりませんがとりあえず、Node用Clientでadminをtrueに変更します。

$ knife client edit client01

{
  "json_class": "Chef::ApiClient",
  "_rev": "1-3d9d9fefc931326527ab1bb9d5c43f0a",
  "admin": false,
  "public_key": ….,
  "name": "client01",
  "chef_type": "client"
}

これでもう一度chef-clientを実行すると無事、Recipeが適用されました。

おしまい。

コメントを残す

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