現象
knife-solo を二回目に実行しようとした際に以下のようなエラーとなってしまう。
ERROR: RuntimeError: Couldn't find Chef >=0.10.4 on xxx.xxx.xxx.xxx
尚、この現象は Debian 環境のみで確認したが、他の OS 環境でも発生するかもしれない。(調査中)
原因
chef-solo のバージョンが適切に判断されない
原因は knife solo を実行する際にデフォルトで対象 node の chef-solo バージョンを以下のようにチェックするが、
sudo chef-solo --version
が実行される際 sudo
コマンドの出力結果として、
sudo: unable to resolve host xxxxxxxxxxxx
と出力されてしまっている為。
chef-solo のバージョン判断を行なっているのが knife-solo-0.2.0/lib/chef/knife/solo_cook.rb
の以下の記述。
sudo: unable to resolve host xxxxxxxxxxxx
となってしまった場合には v
には ["sudo", " unable to resolve host inokappa2\r\nChef", " 11.4.4\r\n"]
こんな感じで値が入ってしまい v[0].strip == 'Chef'
が成立しない為 chef_version
に値が入らない。
対策
--no-chef-check を利用する
対策として一番手っとり早いのが --no-chef-check
オプションを使う。
/etc/hosts を適切に修正する
もしくは /etc/hosts
にホスト名を追加する。
127.0.1.1 ${hostname}
追記(2013/07/11)
発生する条件
検証の結果、以下の条件を全て満たす場合に sudo コマンドを実行すると sudo: unable to resolve host xxxxxxxxxxxx
となり knife solo 側で chef-solo のバージョン判定が出来なくなるようだ。