[Chef] infoScoopのレシピを作ってみる①

| コメントをどうぞ

前回の記事で開発環境とサンプルレシピの作成・動作確認まで行ったので、そろそろ本格的なChefレシピの作成を考えてみます。

前回作成したサンプルでは、指定パスにディレクトリを作成する程度の処理しか行っていませんでした。

今回は infoScoop のレシピ化を前提に、もう少し踏み込んだところまで調査してみます。

infoScoopのインストール工程を確認する

クイックスタートを利用せず、ゼロの状態からinfoScoop環境を構築するには、以下の作業を要します。

  1. infoScoopの入手
  2. Javaインストール
  3. Antインストール
  4. MySQLインストール
  5. MySQLの設定変更
  6. MySQLドライバのインストール
  7. 初期データのインポート
  8. Tomcatインストール
  9. infoScoopのwarファイルを準備
  10. warファイルをTomcatにデプロイ

サーバー移行やテスト環境作成などの度に上記作業を行うのは、なかなか骨が折れます。

これらの作業をChefを使ってどのように自動化するか考えてみます。

利用するリソースを考える

Chefでは、リソースと呼ばれる仕組みを使ってパッケージのインストールやファイル操作などを行うことができます。Chefがデフォルトで提供しているリソースは、以下のドキュメントに記載されています。

http://docs.opscode.com/resource.html#resources

とりあえず、デフォルトで提供されているリソースだけでinfoScoopの環境構築が可能か考えてみます。

 リモートファイルのダウンロード

infoScoopのインストールモジュールはこちらで公開されています。このようなリモートファイルのダウンロードについては、 remote_file リソースが利用できます。

以下のように記述することで、取得先URLのファイルを保存先パスにダウンロードすることができます。

remote_file "保存先パス" do
    source "取得先URL"
end

これでインストールモジュールの取得ができそうです。

各種必要ソフトウェアのインストール

Java、Ant、Tomcat、MySQLドライバのインストールに関しては package リソースが利用できます。

package リソースは、yumやapt等のパッケージインストールを行うことのできるリソースです。OSによる差異もしっかり吸収してくれます。

例えばAntのインストールであれば、以下のように記述します。

package "ant" do
 action :install
end

設定ファイルの編集

Linux環境でinfoScoopを使う場合、MySQLの設定変更を行う必要があります。また、初期データインポートユーティリティやwarファイル生成ユーティリティでもプロパティファイルが必要になります。

このようなケースでは、 あらかじめ設定ファイルのテンプレートを用意しておき、template リソースを使って差し替えを行います。

/etc/my.cnf を用意したテンプレート my.cnf.erb の内容で差し替えるには、以下のように記述します。

template "/etc/my.cnf" do
    source "my.cnf.erb"
end

テンプレートは、CookBookの templates フォルダに格納しておくことで参照できます。上記の例だと、 templates/default/my.cnf.erb です。

erb形式で記述することで、パラメータを渡して内容を動的に制御することも可能です。

シェルの実行

初期データのインポートユーティリティ、およびwarファイル生成を行うためには、付属のシェルを実行する必要があります。

シェルの実行には execute リソースを利用します。このリソースを利用することで、任意のコマンドを実行することができます。

以下の記述で import.sh を実行することができます。

execute "init-infoscoop" do
 command "./import.sh"
end

実行ユーザや実行ディレクトリの指定も可能です。

ファイルの操作

Tomcatへのwarファイル配備時など、ファイル操作する必要が出てきます。

file リソースを使うことで、ファイル操作を行うことが可能です。以下の記述で /tmp/infoscoop.war を /usr/share/tomcat/webapps にコピーすることができます。

file "/usr/share/tomcat/webapps" do
    content IO.read( "/tmp/infoscoop.war" )
end

まとめ

逆引きで調査してみましたが、以下のリソースを組み合わせれば問題なくinfoScoopのレシピが作成できそうです。

単純なリソースの組み合わせだけでなく、他にも様々な要素が必要とは思いますが、とりあえず次回は実際に上記のリソースを使って infoScoop レシピの作成を行ってみます。

 

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>