Chefでのexpectコマンドを利用したprovisioning

vagrant+Chef soloで仮想マシンをたてる時に詰まったのでメモ

詰まったパターン

expectに関する記事を探すと

#!/bin/sh

expect -c "
spawn (コマンド)
expect \"(待機する文字列)\" 
send \"(入力する文字列)\n\"
interact
"

という感じで、expectでの最終行が“interact”になっているのが多い。 しかし、Chefでこのスクリプトを呼び出すとうまくいかなかった。

うまくいったパターン

expectの最終行を“expect eof”としたら、うまくいった。

  • expect_test.sh
#!/bin/sh

expect -c "
spawn (コマンド)
expect \"(待機する文字列)\" 
send \"(入力する文字列)\n\"
expect eof
exit
"

ちなみに、“exit”はあってもなくても大丈夫そう。