serverspec 試してみるなど

gem で導入。

$ gem install serverspec -r --no-ri --no-rdoc

で、以下か。

$ rbenv rehash
$ serverspec-init
Select a backend type:

  1) SSH
  2) Exec (local)
  3) Puppet providers (local)

Select number: 1

Input target host name: 192.168.33.10
 + spec/
 + spec/192.168.33.10/
 + spec/192.168.33.10/httpd_spec.rb
 + spec/spec_helper.rb
 + Rakefile

で、httpd_spec.rb を以下にして

require 'spec_helper'

describe 'port 80' do
  it { should be_listening }
end

で、rake spec なの?

$ rake spec
/home/rms/.rbenv/versions/1.9.3-p385/bin/ruby -S rspec spec/192.168.33.10/httpd_spec.rb
/home/rms/.rbenv/versions/1.9.3-p385/lib/ruby/1.9.1/rubygems/specification.rb:
 1637:in `raise_if_conflicts': Unable to activate rspec-2.12.0, 
 because rspec-core-2.13.1 conflicts with rspec-core (~> 2.12.0) 
 (Gem::LoadError)

これはどうすれば良いのかな。以下?

$ gem install rspec-core -v 2.12.0

で、リトライしてみましたが現象変わらず。2.13.1 なソレを uninstall なのかな。

$ gem uninstall rspec-core -v 2.13.1
Successfully uninstalled rspec-core-2.13.1
$ gem list|grep rspec
rspec (2.12.0, 2.11.0)
rspec-core (2.12.2, 2.12.0, 2.11.1)
rspec-expectations (2.13.0, 2.12.1, 2.11.3)
rspec-mocks (2.13.1, 2.12.2, 2.11.3)
rspec-rails (2.11.0)
serverspec (0.2.18)

で、リトライ。

$ rake spec
/home/rms/.rbenv/versions/1.9.3-p385/bin/ruby -S rspec spec/192.168.33.10/httpd_spec.rb
.

Finished in 0.64013 seconds
1 example, 0 failures

を、動きましたね。

ついでに

vagrant destroy して最初からヤッてみようかな。

$ vagrant destroy

なんか赤いソレが出てますがスルーして vagrant up します。で、以下。

$ rake spec                                                                                                                                                                      
/home/rms/.rbenv/versions/1.9.3-p385/bin/ruby -S rspec spec/192.168.33.10/httpd_spec.rb
F

Failures:

  1) port 80 
     Failure/Error: it { should be_listening }
       expected "port 80" to be listening
     # ./spec/192.168.33.10/httpd_spec.rb:4:in `block (2 levels) in <top (required)>'

Finished in 0.32627 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/192.168.33.10/httpd_spec.rb:4 # port 80 
rake aborted!
/home/rms/.rbenv/versions/1.9.3-p385/bin/ruby -S rspec spec/192.168.33.10/httpd_spec.rb failed

Tasks: TOP => spec
(See full trace by running task with --trace)

で、以下か。

$ cd chef-repo
$ knife solo cook 192.168.33.10

あ、リポジトリがなんちゃらな rpm コマンドをタタいてませんね。これは失敗するのか。リモホ側で以下を実行してリトライ。

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

導入は成功、って何か微妙な出力が。

[2013-05-02T01:19:18+00:00] ERROR: Running exception handlers
[2013-05-02T01:19:18+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated
[2013-05-02T01:19:18+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-05-02T01:19:18+00:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: 
 service[nginx] (nginx::default line 14) had an error: 
  Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], 
  but received '1'
---- Begin output of /sbin/service nginx start ----
STDOUT: Starting nginx: [FAILED]
STDERR: nginx: [emerg] invalid parameter "server_name" in /etc/nginx/nginx.conf:16
---- End output of /sbin/service nginx start ----
Ran /sbin/service nginx start returned 1
ERROR: RuntimeError: chef-solo failed. See output above.

えーと、何故に失敗するのかが分からない。invalid parameter ってさっきは同じソレが通ったんですがね。とりあえず server_name パラメータは IP アドレスにしてみる。
つうか何故に動作確認なレベルでここまでハマるのかが分からない。
と思ったら nginx.conf.erb に不具合発見。listen なパラメータの末端に ; がありませんでした。これは一体どーゆー事なのだろう。
どうも emacs で開いたら設定エントリというかパラメータの表示が微妙な部分があったので、正常に動いていたと思われるバックアップからファイルをコピーしてみました。
これはこれで意味不明。しかも何度ヤッても挙動に変化が無くて埒があかないので vagrant destroy して最初からやり直してたりしてます。rsync 導入し忘れて叱られてるし。

いかん

ログ取りながら作業、ってハマッた時に記録がグズグズになりますね。導入は成功してるのですが、さっきなんで駄目だったかが不明。

$ knife solo cook 192.168.33.10
Running Chef on 192.168.33.10...
Checking Chef version...
Uploading the kitchen...
Generating solo config...
Running Chef...
[2013-05-02T02:10:24+00:00] INFO: *** Chef 10.16.4 ***
[2013-05-02T02:10:26+00:00] INFO: Setting the run_list to ["nginx"] from JSON
[2013-05-02T02:10:26+00:00] INFO: Run List is [recipe[nginx]]
[2013-05-02T02:10:26+00:00] INFO: Run List expands to [nginx]
[2013-05-02T02:10:26+00:00] INFO: Starting Chef Run for localhost
[2013-05-02T02:10:26+00:00] INFO: Running start handlers
[2013-05-02T02:10:26+00:00] INFO: Start handlers complete.
[2013-05-02T02:10:26+00:00] INFO: Processing package[nginx] action install (nginx::default line 10)
[2013-05-02T02:10:30+00:00] INFO: package[nginx] installing nginx-1.4.0-1.el6.ngx from nginx repository
[2013-05-02T02:10:34+00:00] INFO: Processing service[nginx] action enable (nginx::default line 14)
[2013-05-02T02:10:34+00:00] INFO: Processing service[nginx] action start (nginx::default line 14)
[2013-05-02T02:10:34+00:00] INFO: service[nginx] started
[2013-05-02T02:10:34+00:00] INFO: Processing template[nginx.conf] action create (nginx::default line 19)
[2013-05-02T02:10:35+00:00] INFO: template[nginx.conf] backed up to /var/chef/backup/etc/nginx/nginx.conf.chef-20130502021035
[2013-05-02T02:10:35+00:00] INFO: template[nginx.conf] updated content
[2013-05-02T02:10:35+00:00] INFO: template[nginx.conf] owner changed to 0
[2013-05-02T02:10:35+00:00] INFO: template[nginx.conf] group changed to 0
[2013-05-02T02:10:35+00:00] INFO: template[nginx.conf] mode changed to 644
[2013-05-02T02:10:35+00:00] INFO: template[nginx.conf] sending reload action to service[nginx] (delayed)
[2013-05-02T02:10:35+00:00] INFO: Processing service[nginx] action reload (nginx::default line 14)
[2013-05-02T02:10:35+00:00] INFO: service[nginx] reloaded
[2013-05-02T02:10:35+00:00] INFO: Chef Run complete in 8.862711 seconds
[2013-05-02T02:10:35+00:00] INFO: Running report handlers
[2013-05-02T02:10:35+00:00] INFO: Report handlers complete

rake spec もパスするはず。

$ cd ..
$ rake spec
/home/rms/.rbenv/versions/1.9.3-p385/bin/ruby -S rspec spec/192.168.33.10/httpd_spec.rb
.

Finished in 5.25 seconds
1 example, 0 failures

纏め作成に着手の方向にて。