Itamaeが構成管理を仕込みます! ~新進気鋭の国産・構成管理ツール~

第2回 レシピの書き方

この記事を読むのに必要な時間:およそ 4 分

templateリソース

createアクション

templateリソースはremote_fileとほぼ同じですが,sourceファイルとしてERBテンプレートを使える点が異なります。テンプレートを使って動的に設定ファイルを生成し,ホストごとに異なる設定を配布するときに有用です。

ホスト固有の値を渡したり,ホストの情報を取得するにはノード属性機能を利用します。ノード属性については次回解説します。

template "/etc/my.cnf" do
  action :create  # デフォルトなので省略可
  source "my.cnf.erb"
end

remote_fileと同様に,sourceは省略すると自動的に決定されます。sourceを省略した場合は,上記のmy.cnfの例だと以下のパスを上から順番に探索し,最初に見つかったものが使われます。

  • (レシピがあるディレクトリ)/templates/etc/my.cnf.erb
  • (レシピがあるディレクトリ)/templates/etc/my.cnf
  • (レシピがあるディレクトリ)/templates/my.cnf.erb
  • (レシピがあるディレクトリ)/templates/my.cnf

packageリソース

packageリソースはOS標準のパッケージシステムのパッケージを表します。Ubuntu, Debianの場合dpkg(apt)⁠CentOS, RHELの場合rpm(yum)⁠Mac OSの場合Homebrewを操作します。

installアクション

installアクションはパッケージのインストールを行います。すでにパッケージがインストールされていて,versionが指定されていない場合は何もしません。

package "nginx" do
  action :install # デフォルトなので省略可
  version "1.4.6-1ubuntu3.3"
end
removeアクション

removeアクションはパッケージのアンインストールを行います。

package "nginx" do
  action :remove
end

serviceリソース

serviceリソースはSysvinitやUpstartなどで管理されているサービスを表します。packageリソースと同様,OS・ディストリビューションに応じて自動的にコマンドが選択されます。

service "nginx" do
  action :reload
end

利用可能なアクションはstop, start, restart, reloadです。このリソースはデフォルトのアクションがnothingで,actionを指定しない限り何も起こりません。

local_ruby_blockリソース

runアクション

local_ruby_blockリソースはローカルでRubyのコード(ブロック)を実行するだけのリソースです。後述しますが,レシピに書かれたRubyのコードはリソースアクションが実行される前に評価されます。特定のリソースアクションのあとに実行したいコードがある場合,local_ruby_blockを利用します。

local_ruby_block "say hello" do
  action :run # デフォルトなので省略可
  block do
    puts "Hello"
  end
end

全リソース共通の属性

既にでてきたonly_ifnot_ifに加え,いくつかの属性は全リソースで使えるようになっています。

only_if, not_if

only_if, not_ifでリソースアクションを実行すべきかどうかを判定することができます。

  • only_if:指定されたコマンドが成功した場合(コマンドの終了コードが0)のみアクションを実行します。
  • not_if:指定されたコマンドが失敗した場合(コマンドの終了コードが0以外)のみアクションを実行します

user

userで指定したユーザとしてコマンドを実行します。

cwd

cwdで指定したディレクトリ内でコマンドを実行します。

著者プロフィール

荒井良太(あらいりょうた)

クックパッド株式会社 インフラエンジニア。ソフトウェアでのインフラの改善,運用の自動化に興味があり,オペレーションのない世界を夢見ている。休日はOSS活動をしていることが多い。ItamaeInfratasterの開発者。

URL:http://ryotarai.info