Chefのrecipeを書いてみる その2 -recipeからインストールするversionを指定してみる編-
前回書いた,Chefのrecipeを書いてみる その1 -とりあえずrecipeを書いてみる編-に引き続きchefのrecipeを順を追って書いていきます.今日は,versionを指定できるように改造しようと思います.
versionを指定できるようにしてみる
recipeをみてみると,いろいろ抽象化出来るところがありそうです. version,インストールするディレクトリなどなど. とりあえず,バージョンを指定できるようにしてみましょう.
前回はflyway-cliをインストールするためのrecipeを書きました. DL先を見るとちょっと面倒臭い事になりそうです.. 1.1から2.1.1まではtar.gzのファイル名が{version}-distというsuffixが付き, 2.2からは「-dist」は付きません.. そこら辺を考慮して書いていこうとしましたが,バージョンの判定をして2.2より小さかったら対応してないエラーを出す(色々と名前や,ディレクトリが異なるので今回は排除)という方向で行こうと思います.必要になったら書けばいいのです.
インストールディレクトリと,バージョンの指定
とりあえずファイルの中に変数としてインストールディレクトリと,インストールしたいバージョンを変数に代入しておきます.
install_dir = "/opt/flyway" version = "2.2.1"
サポートバージョンの設定
バージョンの判定2.2より小さいものはサポートしないということで,対応しないものはエラーを出力して終了するように記述します.Ruby的にこの書き方が合ってるのかはわからないけど,REPLで試したら概ね動いたので,とりあえずいいかな?
if version < "2.2" then Chef::Log::error "#{cookbook_name} is supported versions in more than 2.2." exit 1 end
インストール先のディレクトリの作成
複数バージョンを持っておくためにversionディレクトリを作成します(そもそも,複数バージョンを保管する需要があるかどうかは要検討).
directory "#{install_dir}/versions" do owner "root" group "wheel" action :create recursive true end
flyway-cliをダウンロードして,展開,シンボリックリンクを貼る(インストール)
すでにシンボリックリンクが存在した場合コケるので,-nf
を追記します.
バージョンはとりあえず,シンボリックリンクの切り替えで対応することにします.
execute "flyway-cli" do command <<-EOH wget http://repo1.maven.org/maven2/com/googlecode/flyway/flyway-commandline/#{version}/flyway-commandline-#{version}.tar.gz -P /tmp tar xzfC /tmp/flyway-commandline-#{version}.tar.gz #{install_dir}/versions ln -nfs #{install_dir}/versions/flyway-#{version} #{install_dir}/flyway EOH end
MySqlを使う場合に必要なconnectorをインストール
MySqlを使う場合にはconnectorが必要なので,これもついでにインストールします.
execute "mysql-connector" do command <<-EOH wget http://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.26.tar.gz -P /tmp tar xzfC /tmp/mysql-connector-java-5.1.26.tar.gz /opt/flyway/flyway/jars EOH end
まとめ
versionを指定するときはrecipeの頭に書いてあるバージョンを書き換えることで,指定したものをインストールすることが出来ます.nodeファイルなど,recipeの外側から指定する方法は追って書こうと思います.
Chefのrecipeを書いてみる一覧
- Chefのrecipeを書いてみる その1 -とりあえずrecipeを書いてみる編-
- Chefのrecipeを書いてみる その2 -recipeからインストールするversionを指定してみる編-
- Chefのrecipeを書いてみる その3 -recipeを分割してみる編-
- Chefのrecipeを書いてみる その4 -インストール済みの場合は実行しないようにしてみる編-
- Chefのrecipeを書いてみる その5 -変数をAttribute化してみる編-