最近は管理しているサーバーが多いのと、構成管理ツール(Ansible)なんかをちょくちょく使ってますが、ちゃんと入っているかどうかを確認するのはそれなりに大変だったりします。
が、構成管理ツール自体もserverspecというテストツールがあるようでちょっと触ってみました。
公式リンクです。
前提条件ですが、Vagrantを使っていないと仮定し、別のホストを検証対象とします。検証対象も自分自身もLinuxと仮定します。
インストール方法
公式にも書いてありますが、私は下記のようにインストールしました。
※serverspecそのものよりはrubyが入っていない場合、ruby入れるほうが面倒でしょうね・・
serverspecのインストール
1 |
gem install serverspec |
次にGemfileというテキストファイルを作ります。
Gemfileですが、どうやらライブラリのバージョン間の依存状態を解消するツールのようです。ここにバージョン記録しておいて、各ライブラリを記述しておくみたいな。
概念としてはphpのcomposer.jsonやJavaのpom.xmlに近いでしょうか。
1 2 3 4 5 6 |
touch Gemfile #下記内容を記述 source 'https://rubygems.org' gem 'serverspec' gem 'rake' |
BundlerとComposerのinstallとupdateの違い
bundle実行
カレントディレクトリにGemfileがある状態でbundleというコマンドを実行してあげるとGemfileに記述されたライブラリを読み込みます。
phpでいうcomposer install ( or update)に近いです。
ひな形の作成
実際にターゲットのホストのテストができるファイルはまだできていません。必要なライブラリが読み込めた時点で下記コマンドを入力します。
1 |
bundle exec serverspec-init |
ここで以下のような対話が始まります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Select OS type: 1) UN*X 2) Windows Select number: 1(←Linuxなので1を入力) Select a backend type: 1) SSH 2) Exec (local) Select number: 1(←ローカルでなくてSSHでテストを行うので1を入力) Vagrant instance y/n: n (←vagrantではないのでnを入力) Input target host name: (←対象のホスト名を入力します。例としてtarget_hostと入れたと仮定します。) + spec/ + spec/target_host/ + spec/targt_host/sample_spec.rb + spec/spec_helper.rb + Rakefile |
テスト内容
実際にテストされる内容は spec/target_host/sample_spec.rbに記述します。
1 2 3 4 5 |
require 'spec_helper' #例えば80番ポートがあいているかどうかの確認をしたいとします。 describe port(80) do it { should be_listening } end |
SSH設定
基本的にはあとは実行するだけですが、SSH鍵認証がとおってないと実行できません。
1 |
ssh ユーザー名@target_host |
でログインできるようにSSHの設定をしておきましょう。
テストの実行
あとは下記コマンドで実行します。
1 |
bundle exec rake spec |
私は下記のようなエラーが出ました。
1 |
Please write "set :request_pty, true" in your spec_helper.rb or other appropriate file. |
spec_helper.rbに
1 |
set :request_pty, true |
を追加して、実行し
1 2 3 4 |
Port "80" should be listening Finished in 4.15 seconds (files took 0.42502 seconds to load) 1 example, 0 failures |
というメッセージが出てとおりました。