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
になって成功するんで、それでやろうかなあと。
ですが、その後に別の場所でエラーになったりして、なんか割と大きめの改修になりそうだったのでとりあえず今うまくいく方法をポストしておこうと思ったのでした。