ChefのRecipeでよく使う機能 その1

投稿者: | 2016年5月18日

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辺りについて書く予定です。

コメントを残す

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

CAPTCHA