Chef を始める #2 – Chef Server に Node を追加して Recipe を実行する

Chef を始める #2 – Chef Server に Node を追加して Recipe を実行する

Clock Icon2013.04.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回 は、Chef Server のインストールと、Workstation のセットアップまで行いました。
今回は、Node を Chef Server に登録して Recipe を実行するところまでやってみたいと思います。

Node の準備

新たに Node 用の EC2 インスタンスを立ち上げ、セキュリティグループで ssh を許可しておきます。
OS は Amazon Linux、インスタンスタイプは t1.micro で試しました。

Chef Client のインストール

EC2 にログインしたら、最初に Chef Client をインストールします。
前回は、RubyGems を使ってインストールを行いましたが、以下の方式でもインストール可能です。

$ sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash
$ chef-client -v
Chef: 11.4.0 

インストールが終わったら、knfie コマンドでクライアントの設定を行います。
-s には、 Chef Server の URL を指定します。

$ sudo mkdir /etc/chef && cd /etc/chef
$ sudo knife configure client -s https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com ./

コマンドを実行すると、 上記で指定した Cherf Sever の URL やログ情報が記載された client.rb と validation.pem いうファイルが作られます。

$ ls
client.rb  validation.pem

client.rb を開き、node_name を追記します。
node_name は、Chef Server への認証時に使用される名前です。

$ sudo vim client.rb
log_level        :info
log_location     STDOUT
chef_server_url  'https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com'
validation_client_name 'chef-validator'
node_name        'web-server'

次に、validation.pem を開き、Chef Server 上にある chef-validator.pem の内容をコピーします。
これは Node の登録時に、最初のみ chef-validator クライアントの証明書を借りるために必要な作業です。
chef-validator は新しいクライアントを登録するための特別なクライアントです。

$ sudo vim validation.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAuVC+mEkuYsT/RWYvJ+PuOQbE022BXNFFZ+rHMUcmWQXtIgwu
MqaJonSVIWAYrwqYmZwrb0dKLuHXd8C+3ICnmZy9dQ0LKTaRPSFGhfeDxTQjlwfK
AdXlRrXAzvmqPXC3yuBGY9XL1wOzYZaCjjWxx2aYtFpQv2RLr/mXvl+vSsYO4hpA
.....
-----END RSA PRIVATE KEY-----

Chef Server に Node として登録する

上記の手順が終わったら、以下のコマンドでこの EC2 インスタンスを Node としてChef Server 登録します。

$ sudo chef-client -c client.rb  

実行後、client.pem が保存されているのが分かると思います。
以降は、この証明書を使って Chef Server に認証する形になります。

$ ls
client.pem  client.rb  validation.pem

ブラウザで Chef Server を開くと、Node List と Client に登録されていることが分かりますね。

chef-node

chef-client

Workstation から Node に Run List を適用する

Run List は、Node に対してどんな Recipe や Role を適用するかのリストです。
Workstation から、この Run List を Workstaion 経由で、Node に適用します。

Cookbook の取得

今回使う Cookbook として、opscode の github に getting-started という非常に簡単なサンプルがありますので、これを Workstation 上に clone します。

$ cd ~/chef/chef-repo/cookbooks
$ git clone https://github.com/opscode-cookbooks/getting-started

clone した Cookbook の中身を確認すると、recipes ディレクトリの中に default.rb というファイルがあります。
このファイルに実際の Recipe が記述されていますが、この Recipe はホームディレクトリ以下に、chef-getting-started.txt を作成するだけのものです。

$ cd getting-started/recipes
$ cat default.rb
template "#{ENV['HOME']}/chef-getting-started.txt" do
  source "chef-getting-started.txt.erb"
  mode "0644"
end

source として template ディレクトリにある chef-getting-started.txt.erb が指定されています。
中身を確認してみましょう。

$ cd ../templates/default
$ cat chef-getting-started.txt.erb
Welcome to Chef!

This is Chef version <%= node[:chef_packages][:chef][:version] %>.
Running on <%= node[:platform] %>.
Version <%= node[:platform_version] %>.

タグで node の属性が指定されています。これは Chef Server 上で確認することができます。

node-attributes

Cookbook の Upload

今回は、この Cookbook をそのまま Chef Server に upload します。

$ cd ~/chef/chef-repo/cookbooks
$ knife cookbook upload getting-started -o .
Uploading getting-started [0.4.0]
Uploaded 1 cookbook.

次にこの Cookbook の中の Recipe を web-server の Node に、Run List として登録しましょう。
コマンドは次のようになります。

$ knife node run_list add web-server "recipe[getting-started]"
web-server:
  run_list: recipe[getting-started]

Chef Server から Run List と Recipe を確認

登録した Run List と Recipe が Chef Server に登録されていることを確認します。

chef-recipes

Node から Recipe を実行する

Run List に登録された Recipe を実行するために Node にログインして以下を実行します。

$ sudo chef-client
Starting Chef Client, version 11.4.0
[2013-04-22T16:59:10+00:00] INFO: *** Chef 11.4.0 ***
[2013-04-22T16:59:11+00:00] INFO: [inet6] no default interface, picking the first ipaddress
[2013-04-22T16:59:11+00:00] INFO: Run List is [recipe[getting-started]]
[2013-04-22T16:59:11+00:00] INFO: Run List expands to [getting-started]
[2013-04-22T16:59:11+00:00] INFO: Starting Chef Run for web-server
[2013-04-22T16:59:11+00:00] INFO: Running start handlers
[2013-04-22T16:59:11+00:00] INFO: Start handlers complete.
resolving cookbooks for run list: ["getting-started"]
[2013-04-22T16:59:11+00:00] INFO: Loading cookbooks [getting-started]
Synchronizing Cookbooks:
  - getting-started
Compiling Cookbooks...
Converging 1 resources
Recipe: getting-started::default
  * template[/root/chef-getting-started.txt] action create[2013-04-22T16:59:11+00:00] INFO: Processing template[/root/chef-getting-started.txt] action create (getting-started::default line 20)
 (up to date)
[2013-04-22T16:59:11+00:00] INFO: Chef Run complete in 0.174993316 seconds
[2013-04-22T16:59:11+00:00] INFO: Running report handlers
[2013-04-22T16:59:11+00:00] INFO: Report handlers complete
Chef Client finished, 0 resources updated

正常に終了したことを確認し、ファイルが作られたか確認します...

$ sudo cat /root/chef-getting-started.txt
Welcome to Chef!

This is Chef version 11.4.0.
Running on amazon.
Version 2013.03.

無事作成されていました!

まとめ

今回は、Node の追加と Recipe の実行までを行いました。
すごく簡単なサンプルだったので、Chef の便利さがなかなか実感出来なかったかもしれません。。
次回は、もう少し実用的な Cookbook を使ってみたいと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.