インフラ構成管理ツール「Serverspec」の基本や「Serverspec」で何ができるのかを調べました。
具体的には宮下剛輔氏が執筆した「Serverspec」という本を読んで学んだことを書いています。
Serverspec 開発者の Twitter
2013年3月「Serverspec」は mizzy氏(宮下剛輔氏)によりリリースされました。
mizzy氏のTwitterです。(頻繁にツイートするので見ていて面白いです)
Serverspecは「振る舞い」をテストするものではなく「状態」をテストするものである
例えば、「振る舞い」のテストは
- GW(192.168.1.1)に ping が通る
- www.google.co.jp の名前解決ができる
- ntpd が ntp.nict.jp から時刻を取得できる
- httpd が起動している
などです。
例えば、「状態」のテストは
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 describe package(‘httpd’), :if => os[:family] == ‘redhat’ do describe package(‘apache2’), :if => os[:family] == ‘ubuntu’ do describe service(‘httpd’), :if => os[:family] == ‘redhat’ do describe service(‘apache2’), :if => os[:family] == ‘ubuntu’ do describe service(‘org.apache.httpd’), :if => os[:family] == ‘darwin’ do describe port(80) do |
Serverspec の名前の由来
Server + RSpec = Serverspec
だそうです。
Serverspecは裏側でコマンドを実行してテストを行っている
例えば先ほどの Serverspec のテストコードに以下のようなコードがありました。
describe port(80) do |
これは何となく80番ポートがリスニング状態になっているかどうかテストをしているんだなと分かりますが、裏側で80番ポートがリスニング状態になっているかコマンドを実行してテストをしています。
しかし「RSpec」の記法で抽象化されているので具体的なコマンドが見えないだけです。
Serverspecの公式サイトとソースコード
Serverspecの公式サイト
Serverspecのソースコード
https://github.com/mizzy/serverspec
用語集
Serverspec本を読んでいる時に調べたいと思った用語を調べました。
リファクタリング(refactoring)
リファクタリング (refactoring) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。
プログラムの動作は同じであるが、ソースコードはガラリと変えてバグを出にくくしたり、拡張性を持たせたり、処理を早くしたりするということです。
【Serverspec】Serverspec の Rakefile を調べた
serverspec-runnerで更に Serverspec の機能が拡張可能
Serverspec だけでは多数のホストをチェックする際に結果の出力が冗長に感じることがあります。
しかし「serverspec-runner」を導入することで複数台のホストのチェック結果を見やすく出力することが可能になります。
【Serverspec】【serverspec-runner】インストールと基本設定
Serverspecの本
何度も読み返しました。
そのたびに「Ruby」や「RSpec」を勉強してカスタマイズしたいなと思います。
Serverspec【インフラ構成管理ツール】著者:宮下剛輔
コメント