ansible_specでsudoパスワードが設定できない

## <font color="red">追記20190701</font>
**このページで書いている問題は、以下のansible_specのPRがマージされたことで、解消されました。**
https://github.com/volanja/ansible_spec/pull/125

## 概要
ansible_specでsudoパスワードを設定しても、以下のエラーが出て、ssh接続できない。

```shell-session
$ ASK_BECOME_PASSWORD=1 bundle exec rake all

vendor/bundle/ruby/2.5.0/gems/specinfra-2.76.3/lib/specinfra/backend/ssh.rb:76:in `create_ssh': Passing nil, or [nil] to Net::SSH.start is deprecated for keys
: keys
Please set sudo password to Specinfra.configuration.sudo_password.
```

## 環境
- CentOS 7.5
- ruby 2.5.0

## 関連記事
- [ansible_specの導入方法](https://qiita.com/Esfahan/items/10af22705881059f281f)
- [Serverspec環境構築手順](https://qiita.com/Esfahan/items/2c80f84a7ea3f71f5037)
- [serverspec-runnerの基本的な使い方](https://qiita.com/Esfahan/items/fe684a87ae2ee7dcfeeb)

## 調査
### serverspecでのsudoパスワードの設定方法
serverspecでsudoが必要な場合は、以下のようにコマンドに変数を付けるか、`export SUDO_PASSWORD=xxxx`のように環境変数をセットする。

```shell-session
$ ASK_SUDO_PASSWORD=1 bundle exec rake all
```

しかし、ansible_specで同様にしてテストを実行すると、以下のエラーが出てssh接続できない。
`Please set sudo password`は、serverspecでsudoパスワードがセットされていないときに出力されるエラーだ。

```
vendor/bundle/ruby/2.5.0/gems/specinfra-2.76.3/lib/specinfra/backend/ssh.rb:76:in `create_ssh': Passing nil, or [nil] to Net::SSH.start is deprecated for keys
: keys
Please set sudo password to Specinfra.configuration.sudo_password.
```

### serverspecとansible_specの違い
spec/spec_helper.rbを確認したところ、`ENV['ASK_BECOME_PASSWORD']`と`ENV['BECOME_PASSWORD']`というものがセットされている。

```diff:spec/spec_helper.rb
  if ENV['ASK_BECOME_PASSWORD']
    begin
      require 'highline/import'
    rescue LoadError
      fail "highline is not available. Try installing it."
    end
    set :become_password, ask("Enter become password: ") { |q| q.echo = false }
  else
    set :become_password, ENV['BECOME_PASSWORD']
  end
```

そこで、以下のようにコマンドを変えてみた。
しかし結果は変わらなかった。

```shell-session
$ ASK_BECOME_PASSWORD=1 bundle exec rake all
```

### `set :become_password`??
もう少しspec/spec_helper.rbを見てみると、`set :become_password`と定義されている箇所がある。

```rb
set :become_password, ask("Enter become password: ") { |q| q.echo = false }
```

```rb
set :become_password, ENV['BECOME_PASSWORD']
```

ここは、serverspecでは`set :sudo_password`と定義されている箇所だ。

### 解決方法
`set :become_password`を`set :sudo_password`に書き換える。
serverspecと合わせるため、`ENV`の部分も書き換える。

```diff:spec/spec_helper.rb
-  if ENV['ASK_BECOME_PASSWORD']
+  if ENV['ASK_SUDO_PASSWORD']
    begin
      require 'highline/import'
    rescue LoadError
      fail "highline is not available. Try installing it."
    end
-    #set :become_password, ask("Enter become password: ") { |q| q.echo = false }
+    set :sudo_password, ask("Enter sudo password: ") { |q| q.echo = false }
  else
-    #set :become_password, ENV['BECOME_PASSWORD']
+    set :sudo_password, ENV['SUDO_PASSWORD']
  end
```

これでsudoパスワードをセットでき、ssh接続、テストも正常に実行された。
interactiveではなく、環境変数を使う場合は`export SUDO_PASSWORD=xxxx`を実行してください。

```shell-session
$ ASK_SUDO_PASSWORD=1 bundle exec rake all
```

ansible_specのソースをちゃんと読んでいないが、なぜこういう実装になっているんだろう。
grepしてみた感じでは、該当箇所は以下。

```shell-session
$ grep -i 'become_password' . -r
./spec/spec_helper.rb:    set :become_password, ask("Enter become password: ") { |q| q.echo = false }
./spec/spec_helper.rb:    set :become_password, ENV['BECOME_PASSWORD']
./vendor/bundle/ruby/2.5.0/gems/ansible_spec-0.2.25/lib/src/spec/spec_helper.rb:  if ENV['ASK_BECOME_PASSWORD']
./vendor/bundle/ruby/2.5.0/gems/ansible_spec-0.2.25/lib/src/spec/spec_helper.rb:    set :become_password, ask("Enter become password: ") { |q| q.echo = false }
./vendor/bundle/ruby/2.5.0/gems/ansible_spec-0.2.25/lib/src/spec/spec_helper.rb:    set :become_password, ENV['BECOME_PASSWORD']
```

他の箇所に対する影響などは今の所不明だが、とりあえずこの方法で対応する。

## Issue
Issueで問い合わせ中。

- https://github.com/volanja/ansible_spec/issues/120

**<font color="red">以下のPRで修正されました。</font>**
https://github.com/volanja/ansible_spec/pull/125