ChefのRecipeを書く(2)

ntpのインストール

引き続きyumでntpのインストールを行います。
cookbook/COOKBOOK/recipes/default.rbに以下の内容を追加します。

package "ntp" do
 action :install
end

で、実行をしてみます。

$ sudo chef-solo -c .chef/solo.rb -j .chef/chef.json
INFO: *** Chef 0.10.8 ***
.
.
.
INFO: Processing package[ntp] action install (base_packages::default line 53)
INFO: package[ntp] installed version 4.2.2p1-15.el5.centos.1
INFO: Chef Run complete in 25.093701 seconds
INFO: Running report handlers
INFO: Report handlers complete

$ rpm -qa | grep ntp
ntp-4.2.2p1-15.el5.centos.1

無事インストールできました!

これで予定していたものは全て終了ですが、物足りないのでntp.confをAWSのS3から取ってくるのをやってみたいと思います。

S3に接続するためのs3cmdの設定から

S3に接続するときにはs3cmdを使います。
s3cmdは始めに

s3cmd --configure

というコマンドで~/.s3cfgという設定ファイルを作るのですが、このコマンドは対話型で使いづらいので、この.s3cfgをテンプレートとして使いたいと思います。

まずは.s3cfgをテンプレート化します。
.s3cfgでaccess keyとsecret keyの部分を以下のようにして変数扱いにします。

access_key = <%= @access_key %>
secret_key = <%= @secret_key %>

そしてcookbooks/COOKBOOK/templates/defaults3cfg.erbという名前で保存します。

次にrecipeでこのテンプレートを使うように定義を加えます。

cookbooks/COOKBOOK/recipes/default.rb

template "/home/piyo/.s3cfg" do
 source "s3cfg.erb"
 owner "piyo"
 group "piyo"
 mode 0600
 variables(
  :access_key => "xxxxxxxxxxxxxxxxxxxxx",
  :secret_key => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 )
end

chef-soloを実行し、s3cmdを実行すると無事s3に接続することができました。

Resource s3_fileのセットアップ

このs3_fileですが、chef 11.0.0にアップデートしたら使えなくなりました。調査はしていませんが、取り急ぎ!

これでs3cmdコマンドが使えるようになりました。
が、よくよく調べてみるとs3cmdコマンドなんて使わなくてもs3のファイルのresourceのs3_fileというものがあるらしいのでさっそくそれを使えるようにセットアップします。

githubからs3_file.rbを取得

このs3_fileは公式ではなく、サードパーティなのでgithubとかよくわからないですが、そこからダウンロードしてきます。

S3 File Resource for Chef(gist.github.com)

ダウンロードしたs3_file.rbcookbooks/COOKBOOK/libraries/に置きます。

cookbooks/COOKBOOK/recipes/default.rbには以下を追加します。

s3_file "/etc/ntp.conf" do
 source "s3://your_bucket/directory/ntp.conf"
 owner "root"
 group "root"
 mode 0644
 access_key_id "xxxxxxxxxxxxxxxxxxxx"
 secret_access_key "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
end

実行してみると

LoadError: no such file to load -- aws/s3

と怒られましたのでaws/s3をインストールします。

sudo gem install aws-s3

再び実行すると今度はうまくいきました。
/etc/ntp.confの中を見てみると、、、


<Error><Code>PermanentRedirect</Code>
.
.

むむむ、なんかエラーのようです。どうやらエラーのハンドリングを省いているようで、エラーでもERRORと出ないのか。
どうにかならないもんでしょうか。

それはちょっと置いておいてなぜエラーになったのかを調べます。
どうやらsourceの部分でregionを指定する必要があったみたいです。
なので以下のように書き直します。

s3_file "/etc/ntp.conf" do
 source "s3-ap-northeast-1://your_bucket/directory/ntp.conf"
 owner "root"
 group "root"
 mode 0644
 access_key_id "xxxxxxxxxxxxxxxxxxxx"
 secret_access_key "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
end

再び実行して/etc/ntp.confを見るとうまくできてました!
ちょっと問題はありますが、目的は達成。
これで実用化できそうです。
あと、AWSのaccesskeyとsecretkeyの指定が冗長なのでここは一つの変数にまとめたいところです。

おしまい。

コメントを残す

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