ようへいの日々精進XP

よかろうもん

knife solo が動かなくなって焦った件について

現象

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 のバージョン判定が出来なくなるようだ。

  • Debian 又は Ubuntu 環境
  • sudo がインストールされている
  • /etc/hosts と /etc/hostname のホスト名が異なる

参考