chef の rpm_package リソースで http 経由で rpm をインストールしようと
rpm_package 'xxx' do
source 'http://xxx/xxx.rpm'
end
としたができなかった。コードを読むと、どうやら chef のロジックに File.exist?(@resource.source)
のような余計なチェックが入っているようで、そこで弾かれてしまっているようだ。
そこで、http 経由で rpm をインストールできるようにしたのでメモ。
その1 - remote_file でファイルを落としてくる
remote_file
で http 経由でファイルを落として来て、それを rpm_package
で入れる。
そういう definitions を定義してしまえばよい。
コードはこちらにある => https://gist.github.com/sonots/c538cb368b3c2b366632
その2 - rpm_package のロジックを変える
rpm_package をカスタムして、HTTP 指定の場合は File.exists?
チェックしないようにする。
コードはこちらにある => https://gist.github.com/sonots/7def97e78bc7e04847eb
おわりに
個人的には、複数のリソースを1度に動かしとログにたくさん結果が出てしまうので、1つのリソースで完結する2の方が気に入っている。
ただ、ホントは rpm コマンドを叩く前に、HTTP HEAD でファイルの存在確認をしたほうが良くって、まだそこができてない。そこを実装したら PR 送れる。FTP のパターンもあってめんどくさい。
追記: まだチェックはいれてないけど、とりあえずプルリった => https://github.com/opscode/chef/pull/2770