こんにちは、貴子です。
最近は一ヶ月の半分くらいchefのresipeを書いていたので、
よく使ったrecipeの書き方をまとめて紹介します。
Install
・package インストール
package "curl-devel" do action :install end
・gem インストール
gem_binaryはインストールに使うgemの場所を指定しています。
rbenv等で複数のrubyを使い分けている方はぜひ利用してください。
gem_package mackerel-client do gem_binary("/root/.rbenv/shims/gem") action :install end
・rpm インストール
rpmでのnginxのインストールrecipeです。
まずnot_ifで既にインストールされているか確認して、されてなければremote_fileでrepositoryを取ってきています。
その後rpm_packageでインストールを行います。
# install repo remote_file "#{Chef::Config[:file_cache_path]}/nginx-release-rhel-6-0.el6.ngx.noarch.rpm" do source "http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm" not_if "rpm -qa | grep -q '^nginx-release'" action :create notifies :install, "rpm_package[nginx-release]", :immediately end rpm_package "nginx-release" do source "#{Chef::Config[:file_cache_path]}/nginx-release-rhel-6-0.el6.ngx.noarch.rpm" action :nothing end
template
テンプレートを置いて、更新があったらnotifiesで指定したServiceをrestartします。
template "/etc/td-agent/td-agent.conf" do mode "0644" source td-agent.conf notifies :restart, 'service[td-agent]', :delayed end ## Service restart service "td-agent"
Download
wgetコマンドでtomcat7を取ってきているところのrecipeです。
tomcat7.tar.gzがpackage_pathにない場合のみ、ダウンロードを実行してもってきます。
package_name = "tomcat-#{tomcat_version}" package_path = "#{Chef::Config[:file_cache_path]}/#{package_name}.tar.gz" source_url = "http://archive.apache.org/dist/tomcat/tomcat-#{major_version}/v#{tomcat_version}/bin/apache-tomcat-#{tomcat_version}.tar.gz" # Download remote_file package_path do source source_url not_if { File.exist?(package_path) } end
attribute
attributeから変数を引き継ぎます
・attribute側で変数のデフォルト値をsetします
default["app-base"]["template_name"] = "app-base.conf.erb"
・recipeで変数を受け取ります
app-base_conf = node["app-base"]["template_name"]
配列
パッケージのインストールをまとめて実行することもできます。
# install basic rpms %w{ntp wget git screen dstat vim-enhanced tar gzip}.each do |pkg| package pkg do action :install end end
attributeで変数を持たせる場合はこう書きます。
・attribute
default['app-base']['plugins'] = ["ntp","wget","git","dstat","vim-enhanced","tar","gzip"]
・recipe
node['app-base']['plugins'].each do |plugin| package plugin do action :install end end
crontab
crontabの設定方法です。
cron "logManager.sh" do minute "00" hour "01" user "root" command "/data/shell/logManager.sh" end
こんな感じにcronが設定されます。
# Chef Name: logManager.sh 00 01 * * * /data/shell/logManager.sh
Qiitaにも同じ内容を投稿しています。
ぜひストックしてください!
http://qiita.com/takako/items/af7940cc63872f6e1621