chefを動かす
今回は、chefを使ってみたいと思います。
前提として、chef、svnサーバがあることとし、主に利用する側に焦点を当てていきます。
かなり、特定の環境に特化しているかもしれませんが、、
基本の3工程
cookbookを作成する
cookbookを作成します
knife cookbook create ${cookbook_name} -o /opt/chef-repo/cookbooks
結果、指定したフォルダにファイルとともにテンプレート?を生成してくれます。
svnを利用している場合は、以下で対象フォルダのみコミットできます。
svn add ${cookbook_name} --force svn commit -m "${commit message}"
今回はjavaのインストールをやってみます。
cookbook/recipes/default.rb を編集します
package "{java package name}" do action :install end //パスを通す場合(環境に依存します) # add java path script "path_java" do interpreter "bash" user "root" group "root" code <<-EOH if [ ! -f /usr/bin/java ] ; then ln -s /usr/local/java/bin/java /usr/bin/java fi EOH end
最後に変更をshefサーバに知らせます
knife cookbook upload {$cookbook name} -o /opt/chef-repo/cookbooks
roleを作成する
以下のコマンドでロールが作成されます
knife role create ${role_name} --editor=vi
参照する場合、
knife role show ${role_name}
指定したファイルで上書きする場合、先ほど
下記のように記述をしたファイルを作成し、
${role_name}.rb 任意ですが、こんなファイルを作ります。
name "${role_name}" description "${role_name}" run_list( "recipe[${cookbook_name}]" )
そして、以下のコマンドでupdateします
knife role from file 追加したロールのファイルのフルパス
clientから
実際に配置を行いたいサーバで実行します。
chef-clientはすでに入っているものとします。
まずnodeファイルを作ります。
いろんな書き方があるとは思いますが、こんな感じです。
詳しくはまだ調べてないので、こんな感じで、指定します。
ファイル名は任意ですが、${server name}.json とかが適当でしょうかね
{ "normal": { "service_attr": { "env": "${env}", "manager": "false", "client": "true" }, "tags": [ ], "ip": "${server ip}" }, "name": "${server name}", "override": { }, "default": { }, "json_class": "Chef::Node", "automatic": { }, "chef_environment": "${env}", "run_list": [ "role[${role name}]" ], "chef_type": "node" }
今度はクライアントから、knifeコマンドで通知してあげます。
sudo knife node from file chef/node/${server name}.json
これで準備が整ったのでchefの実行です
sudo chef-client
完了です。
雑感
cookbookでは今回、recipeしか使っていませんが、
templeteなども便利そうなので使っていけたらと思いました。
あと、filesとか