LoginSignup
6
5

More than 5 years have passed since last update.

Infrataster+Vagrantでssh_execに失敗する時

Posted at

Infratasterでは、テスト用に定義したサーバーにSSH接続してコマンドを実行する、current_server.ssh_execというユーティリティメソッドが用意されています。これを使って、RSpecのbeforeブロックでちょっとした準備をしたりできます。

spec/spec_helper.rb
describe server(:proxy) do
  before do
    current_server.ssh_exec "echo 'Hello' > /tmp/test"
  end
end

これがエラーになるパターンがあったので、その紹介と解決法を書いてみます。


Vagrantでバーチャルマシンを作っている時は、サーバー定義でvagrant: trueにしていると思います。

spec/spec_helper.rb
Infrataster::Server.define(
  :proxy,
  '192.168.33.10',
  vagrant: true
)

で、Vagrantfileconfig.vm.defineを使ってバーチャルマシンに名前を付けて いない 時、

Infrataster::Server::Error: `vagrant ssh-config` failed. Please check if VMs are running or not.

というエラーを吐いてcurrent_server.ssh_execが失敗してしまいます。

これの(たぶん)一番簡単な解決法は、サーバー設定を定義する時にSSHの設定も定義してしまうことだと思います。

spec/spec_helper.rb
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: truevagrant: :defaultと変えてやれば(そう、true/falseだけじゃなくて名前を設定してもいいんです)vagrant ssh-config defaultになって成功するんで、それでやろうかなあと。
ですが、その後に別の場所でエラーになったりして、なんか割と大きめの改修になりそうだったのでとりあえず今うまくいく方法をポストしておこうと思ったのでした。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5