顛末
伊藤直也さんの「ChefとVagrantによるインフラのコード化」と「serverspecによるテスト駆動インフラ構築」を続けて手元で試した。
「serverspecによるテスト駆動インフラ構築」の122ページ、nginxの「テストを実行する」ステップで、テストが赤のままFailureした。WEB+DBの記述によれば、ここですべて通るはずなのに。
何度試してもテストは通らない。よくログを見ると、そもそも
$ knife solo cook webdb
でnginxをインストールしようとしても
package[nginx] action install (up to date)
となっている。すでにup to dateだからインストールする必要はないとのこと。しかしvagrant sshで実際に見てみるとrake specの結果どおり、インストールはされていない。
原因
Vagrantで作った仮想サーバのホスト名が両方ともwebdbだったからだよ!!!!!!!!
どういうことかというと
knife-soloやserverspecはsshでサーバに入ってシェルスクリプトを実行するだけのもの。なので、
ssh webdb
でwebdbと名前をつけたサーバに入れるように設定しておく必要がある。
そのため~/.ssh/configにwebdbというサーバ名でsshログインできるように設定を書いておく。のだが、~/.ssh/configにWEB+DB Press 75号で作ったwebdbの設定が残っていた。つまり
Host webdb
# 以下省略
Host webdb
# 以下省略
と、webdbと名づけたホストが2つ入っていた。ssh wedbしても、75号で作ったほうにsshしてしまう。なのでchefが目的のホストでなく75号のホストで動いていた。
結論
ホスト名は webdb75ewtl のような間違えない名前にしよう。