ChefのRecipeでよく使う機能について簡単使い方を説明します。
今回説明する機能は次の4つになります。
1.execute
2.remote_file
3.directory
4.cookbook_file
1.execute
コマンドを実行することができます。
極論を言えばこれだけでRecipeを書くことができます(普通はしませんが……)。
execute "{適当になんでもいい}" do command "{コマンド}" not_if { {条件} } end
下記の例はwildflyインストールのレシピに使用した記述です。
「/tmp」に落としてきたwildflyをディレクトリ一式「/opt」にコピーするものです。
既にwildflyのディレクトリが存在していたら実行しません。
execute "wildfly install" do command "cp /tmp/wildfly-10.0.0.Final /opt/wildfly10" not_if { Dir.exists?("/opt/wildfly10") } end
2.remote_file
ファイルを外からダウンロードすることができます。
ミドルウェアのパッケージをダウンロードしてくるのが主な用途です。
remote_file "{保存先のパス}" do source "{ダウンロード先のURL}" owner "{ユーザー}" group "{グループ}" mode "{パーミッション}" end
下記の例はS3に配置したファイルをダウンロードする例です。
「wildfly-10.0.0.Final.zip」を「/tmp」ディレクトリに保存しています。
remote_file "/tmp/wildfly-10.0.0.Final.zip" do source "https://s3-ap-northeast-1.amazonaws.com/wildfly/wildfly-10.0.0.Final.zip" owner "root" group "root" mode "0755" end
3.directory
ディレクトリを作成することができます。
階層を持たせて作成する場合は「recursive」の指定が必要になります。
directory "{作成するディレクトリのパス}" do owner "{ユーザー}" group "{グループ}" recursive {親ディレクトリを作成するかどうか} mode {パーミッション} action :{ディレクトリをどうするか} end
下記の例では「main」ディレクトリの作成を行ないます。
親ディレクトリがない場合は同時に作成します。
directory "/opt/wildfly10/modules/system/layers/base/com/mysql/main" do owner "wildfly" group "wildfly" recursive true mode 0755 action :create end
4.cookbook_file
Chefリポジトリのファイルをリモートサーバに配置します。
配置したいファイルは「files」に格納されているものになります。
jbossやapache設定等、主に設定ファイルを配置する目的で使います。
cookbook_file "{配置先のパス}" do source "{配置元のパス}" owner "{ユーザー}" group "{グループ}" mode {パーミッション} end
下記の例では「module.xml」をリモートサーバに配置しています。
ファイルは「coookbook/{recipe名}/files/wildfly/module.xml」に格納したものです。
cookbook_file “/opt/wildfly10/modules/system/layers/base/com/mysql/main/module.xml” do
source “wildfly/module.xml”
owner “wildfly”
group “wildfly”
mode 0755
end
以上、Chefでよく使う機能の説明でした。
前記にもあげたように極端な話、executeコマンドで全て実行することは可能です。
その場合は実行したかどうかの判定を「not_if」を使い自分で行なわなければなりません。
executeコマンドはChefに使いたい機能が存在しなく、どうしてもというときに使用します。
次回はtempleteやattribute辺りについて書く予定です。