rbenvのuser_installのChefでのインストールが失敗した時に対処法
chef-rbenv
を使いrbenv
をCentOSにインストールしようとしたのですが、一度途中で接続が切れて失敗し、それ移行何度試しても失敗してしまいます。
Berkfile
cookbook "rbenv", github: 'fnichol/chef-rbenv'
node/foobar.json
"user_installs": [
{ "user": "deployer",
"rubies": ["2.0.0-p451", "2.1.5"],
"global": "2.1.5",
"gems": {
"2.1.5": [
{ "name": "activesupport"},
{ "name": "bundler"},
{ "name": "rake", "options": "--force" },
{ "name": "pry"}
]
}
}
]
このような設定でknife solo cook foobar
でレシピを適用させると、以下の様なエラーで終了し
Recipe: rbenv::user
* rbenv_ruby[2.0.0-p451 (deployer)] (deployer) action install (up to date)
* rbenv_ruby[2.1.5 (deployer)] (deployer) action install (up to date)
* rbenv_global[2.1.5 (deployer)] (deployer) action create (up to date)
* rbenv_gem[2.1.5::activesupport (deployer)] (deployer) action install
================================================================================
Error executing action `install` on resource 'rbenv_gem[2.1.5::activesupport (deployer)] (deployer)'
================================================================================
Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '127'
---- Begin output of export RBENV_ROOT="/home/deployer/.rbenv" && export PATH="$RBENV_ROOT/bin:$RBENV_ROOT/shims:$PATH" && export RBENV_VERSION="2.1.5" && $RBENV_ROOT/shims/gem env gempath ----
STDOUT:
STDERR: rbenv: gem: command not found
実際にログインして状態を確認してみたところ
$ ruby -v
rbenv: ruby: command not found
The `ruby' command exists in these Ruby versions:
2.0.0-p451
$ rbenv versions
2.0.0-p451
* 2.1.5 (set by /home/deployer/.rbenv/version)
$ ls ~/.rbenv/versions/
2.0.0-p451 2.1.5
$ ls ~/.rbenv/versions/2.1.5/
lib
$ ls ~/.rbenv/versions/2.0.0-p451/
bin include lib share
のように2.1.5
のインストール自体が失敗してるようでした。恐らく初めに接続が切れたせいで中途半端にインストールされたこの~/.rbenv/versions/2.1.5
のディレクトリ自体を削除して再試行すれば正常にインストールが続行されるとは思うのですが、せっかくChefで自動化していますのでこのような手動操作は入れたくありません。
Chef側の設定だけでこのような状態に対処させるにはどうすればよいのでしょうか?