[Chef]レシピの中でwgetって書かない方がいいよ

レシピにwgetと書くのはリスクがありますよという話。

wget先のファイルがいつもあるとは限らない

覚えたてのChef-soloでレシピをもりもり書いて、完成したーー!!ってなって、
翌日、まっさらの仮想マシンでレシピを実行しなおしたら見事にコケました。

コケたのはこれ。
wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.8.7-2.tar.gz
ImageMagickをソースからコンパイルするレシピ。
なんでやねんと思って kddlabsさんのサイトをブラウザで開いてみたらぎょっとした。
imagemagick_ftp.png

ImageMagick-6.8.7-3.tar.gz がめでたくリリースされていて、ImageMagick-6.8.7-2.tar.gz は消えていました。orz

ああ、そうか、そうだよな。
人様が運営しているFTPサーバに、いつもつねに同じファイルがあるとは限らないよな、という当たり前のことを学びました。

対策:cookbook_fileリソースを活用しよう

  • tar.gzファイルをあらかじめ取得しておく
  • それをcookbookディレクトリ/files/default/ 下にコミットしておく
コミットしておいたtar.gzファイルを cookbook_fileリソースを使ってサーバに展開してあげましょう。
cookbook_file "ImageMagick" do

  # "cookbook_dir/files/default/" からの相対パス
  source "ImageMagick.tar.gz"

  # destination
  path "/usr/local/src/ImageMagick.tar.gz"

end
これで幸せになれます。

Happy Provisioning !
カテゴリ: