December 23, 2013

chefでnpmパッケージをインストールする時に、インストール済みパッケージをスキップする

chefの小ネタです。(凄く中途半端な終わり方ですが。。。)

自前でnpmパッケージをインストールする時に
%w{xxx yyy}.each do |p|
  execute p do
    command 'npm install -g ' + p
  end
end
としていたんですが、これだと毎回installが実行されてしまうので、レシピの実行時間が長くなってしまっていました。

なんとか解決したいなーと調べてみると https://github.com/balbeko/chef-npm/pull/9/files を見つけたので、真似してみました。
%w{xxx yyy}.each do |p|
  execute p do
    command 'npm install -g ' + p
 not_if "npm -g ls 2> /dev/null | grep '^[├└]─[─┬] #{p}@'"
  end
end
みたいな感じで手動で試してみたらうまくいくんですけど、chefからだとうまくいかないのは何故だ。。。(解決したら更新します。。。)


No comments:

Post a Comment