【Serverspec】インフラ構成管理ツール「Serverspec」で何ができるのか?

インフラ構成管理ツール「Serverspec」の基本や「Serverspec」で何ができるのかを調べました。

具体的には宮下剛輔氏が執筆した「Serverspec」という本を読んで学んだことを書いています。

 

 

 

Serverspec 開発者の Twitter

2013年3月「Serverspec」mizzy氏(宮下剛輔氏)によりリリースされました。

mizzy氏のTwitterです。(頻繁にツイートするので見ていて面白いです)

 

Serverspecは「振る舞い」をテストするものではなく「状態」をテストするものである

例えば、「振る舞い」のテストは

などです。

 

例えば、「状態」のテストは

IPアドレスが「192.168.1.2」である

/etc/resolv.conf に「8.8.8.8」のエントリがある

ntpd もしくは chronyd が起動している

rpm コマンドを実行すると「httpd 2.4」がインストールされている

chkconfig コマンドもしくは systemctl コマンドを実行すると ntpd もしくは chronyd が自動起動の設定になっている

などです。

 

Serverspecの利用目的一覧

Severspec を利用すると以下が実現できます。

 

人間はどうしてもヒューマンエラーを起こしてしまうので、信じられないようなミスを起こすことがあります。

例えば、「Teraterm」で「/etc/sysconfig/network/ifcfg-ens160」を「vi」コマンドで開いているとします。

その時にマウスを「左クリック」すると、直前にTeratermでクリックしてクリップボードに保存されている内容が一気にコピペされます。

しかしコピペされたことに気が付かずになぜか「:wq」でファイルを閉じてしまったら、その時は問題ありませんが、サーバーを再起動した際にいきなりネットワークにつながらなくなります。

「iLO」でリモートアクセスできればいいですが、出来ない場合は現地に行ってコンソール接続をしてコンソールから原因を調査することになります。

しかしその間はサービスが止まり機会損失が発生するかもしれません。

 

「ifcfg-xxx」ファイルだけでなく、それが「ntpd.conf」だったり「httpd.conf」ファイルだったり「resolv.conf」ファイルだったりすることもあります。

しかし Serverspec を利用することでサーバー再起動後でも同じ状態かどうかをすぐに確認することができます。

 

 

Serverspec は「RSpec」という「Ruby」製テストフレームワークを基に作られている

Serverspec は「サーバの状態」をコードにより自動的にテストをするためのツールです。

Ruby 製のテストフレームワークである「RSpec」を基に開発されています。

 

テストコードは「RSpec」の記法で記述します。

以下の「sample_spec.rb」ファイルのコードを見ると、RSpec の記法の特徴が分かると思います。

かなり自然言語に近いと感じたと思います。

[test@cent07 localhost]$ pwd
/home/test/serverspec-test/spec/localhost
[test@cent07 localhost]$ ls
sample_spec.rb
[test@cent07 localhost]$ cat sample_spec.rb
require 'spec_helper'

describe package('httpd'), :if => os[:family] == 'redhat' do
  it { should be_installed }
end

describe package('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_installed }
end

describe service('httpd'), :if => os[:family] == 'redhat' do
  it { should be_enabled }
  it { should be_running }
end

describe service('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_enabled }
  it { should be_running }
end

describe service('org.apache.httpd'), :if => os[:family] == 'darwin' do
  it { should be_enabled }
  it { should be_running }
end

describe port(80) do
  it { should be_listening }
end
[test@cent07 localhost]$

 

Serverspec の名前の由来

Server + RSpec = Serverspec 

だそうです。

 

Serverspecは裏側でコマンドを実行してテストを行っている

例えば先ほどの Serverspec のテストコードに以下のようなコードがありました。

describe port(80) do
  it { should be_listening }
end
[test@cent07 localhost]$

 

これは何となく80番ポートがリスニング状態になっているかどうかテストをしているんだなと分かりますが、裏側で80番ポートがリスニング状態になっているかコマンドを実行してテストをしています。

しかし「RSpec」の記法で抽象化されているので具体的なコマンドが見えないだけです。

 

 

 

Serverspecの公式サイトとソースコード

Serverspecの公式サイト

http://serverspec.org/

 

 

Serverspecのソースコード

https://github.com/mizzy/serverspec

 

 

用語集

Serverspec本を読んでいる時に調べたいと思った用語を調べました。

 

リファクタリング(refactoring)

リファクタリング (refactoring) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。

https://ja.wikipedia.org

 

プログラムの動作は同じであるが、ソースコードはガラリと変えてバグを出にくくしたり、拡張性を持たせたり、処理を早くしたりするということです。

 

 

 

 

 

【Serverspec】Serverspec の Rakefile を調べた

 

 

serverspec-runnerで更に Serverspec の機能が拡張可能

Serverspec だけでは多数のホストをチェックする際に結果の出力が冗長に感じることがあります。

しかし「serverspec-runner」を導入することで複数台のホストのチェック結果を見やすく出力することが可能になります。

 

【Serverspec】【serverspec-runner】インストールと基本設定

 

 

 

Serverspecの本

何度も読み返しました。

そのたびに「Ruby」「RSpec」を勉強してカスタマイズしたいなと思います。

Serverspec【インフラ構成管理ツール】著者:宮下剛輔

 

 

 

 

 

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人