Infratasterでは、テスト用に定義したサーバーにSSH接続してコマンドを実行する、current_server.ssh_execというユーティリティメソッドが用意されています。これを使って、RSpecのbeforeブロックでちょっとした準備をしたりできます。
describe server(:proxy) do
before do
current_server.ssh_exec "echo 'Hello' > /tmp/test"
end
end
これがエラーになるパターンがあったので、その紹介と解決法を書いてみます。
Vagrantでバーチャルマシンを作っている時は、サーバー定義でvagrant: trueにしていると思います。
Infrataster::Server.define(
:proxy,
'192.168.33.10',
vagrant: true
)
で、Vagrantfileでconfig.vm.defineを使ってバーチャルマシンに名前を付けて いない 時、
Infrataster::Server::Error: `vagrant ssh-config` failed. Please check if VMs are running or not.
というエラーを吐いてcurrent_server.ssh_execが失敗してしまいます。
これの(たぶん)一番簡単な解決法は、サーバー設定を定義する時にSSHの設定も定義してしまうことだと思います。
Infrataster::Server.define(
:proxy,
'192.168.33.10',
ssh: {user: 'vagrant', keys: [File.expand_path('~/.vagrant.d/insecure_private_key')]},
vagrant: true
)
これでとりあえずうまくいきます。
始めはInfratasterにパッチを当てて解決しようと思っていました。
↑の「vagrant ssh-config failed.」というエラーだけなら、vagrant: trueをvagrant: :defaultと変えてやれば(そう、true/falseだけじゃなくて名前を設定してもいいんです)vagrant ssh-config defaultになって成功するんで、それでやろうかなあと。
ですが、その後に別の場所でエラーになったりして、なんか割と大きめの改修になりそうだったのでとりあえず今うまくいく方法をポストしておこうと思ったのでした。