はじめに
最近仕事でcapistranoを触っています。
リモートサーバへの処理を自動化するツール作りとしてcapistranoを使っていましたが、今後はInfrastructure as a Codeの考えを用いて、サーバのデプロイ、メンテ、テストも全部コードでやりましょうよということで、Serverspecの話題が出たので触ってみました。
Serverspecの導入
Serverspecはインフラのテストツールです。
gem install serverspecでいれて、任意のディレクトリでserverspec-initを実行すれば雛形ができます。作者も言っている通り敷居の低さはいいですね。
Serverspecの本
この本随分前に購入していて、ぱらーっと読んだだけで実践していない状態でした。やっぱり目的がないと技術ってダメですね。今回仕事で目的が出来たのでもう一度読みなおしました。理解も全然違う。
- 作者: 宮下剛輔
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
作者本人が書いているから、設計思想がふんだんに盛り込まれていて良いです。
今回深く読んだのは以下の部分。
- 1章 Serverspecの紹介
- 3章 Serverspecの本格利用
- 付録A リソースタイプリファレンス
会社でやるって決まって対象サーバの必要サービスが動いているか?のテストまでは本を読み返す前に実装していたので、今後どういったテストを書くべきかという思想と、そのリファレンスが必要だったのでこの部分を読み込みました。他の部分も目は通しています。必要になったときにまた読めばいいかなと。
リソースタイプ
じゃあどんなテストができるの?といった質問に答えるにはリソースタイプを知らなければなりません。今後各サーバの担当者に「サーバのあるべき姿」を保つためにはどのような設定が必須ですか?という質問をする際に「じゃあどんなことがテストできますか?」と聞かれるはずです。ヒアリングの前に知っておく必要がありますね。
Command
任意のコマンドを実行して、その標準出力、標準エラー出力、終了コードをテストすることができます。Serverspecに実装されていないリソースのテストをする際にかならず使うことになるでしょう。
Cron
エントリーがあるかをテスト。いいですね。
file
be_fileやbe_directoryでファイルであるか、ディレクトリであるかのテストっていうけど、存在確認のテストだと思えばいいですかね。それに加えてcontentで設定ファイルの中身をテストしたりできますね。
あとはbe_mountedでマウントされているか、md5sumやsha256sumでファイルが置き換えられてないかのチェックも使えそうです。
host
テスト対象ホストから別のホストへ名前解決ができるか、tcp/udpで通信可能か、といったことをテストできます。これはあんまり使いドコロがないように思えるし、著者が言っているように振る舞いのテストなので将来的に廃止する可能性もあるとか。
interface
対象にインタフェイスにipアドレスが割り当てられているかどうか。VMだと突然eth0消滅とかありかねないので、必要でしょう。
package
パッケージがインストールされているかどうか。構成ツールが信頼できていれば入っているはずですが、レシピを書くひとが書き忘れる可能性もあるため、必要でしょう。このあたりのテストをどこまで書くかの考え方は3章の後半で説明されています。
port
あるportがlisten状態かどうかのテスト。これも必要ですね。
selinux
これも単純ですが、必要です。selinux_moduleも同様。
service
もっとも最初に思いつくのがこれ、該当サービスの自動起動状態と、起動状態の確認。サービスが落ちていたらどうしようもない。
公式サイト
Resource Type
リソースタイプの最新はこちらにあるとのこと。見てみる。
まずbondとbridgeが追加されてます。そしてmysql_config!これはmysql使ってるので助かりますね。
ついでですので公式サイトの他のページにも目を通しましょう。
Advanced Tips
- sshパスワードログインの方法
- テストコードを複数のホストで共有する方法
これはロールの考え方を採用してますね。ロールでフォルダを作り、ホストはロール+名前という命名規則であれば、spec_helperにこういう風に書けば適用できるよと。このあたりはカスタマイズが柔軟にできる代わりにユーザが頭を使わないといけない部分。
多分、全部本に記載されている内容ですね。
Host Inventory
This is one of the features of Specinfra precisely, not Serverspec. But you can use this feature from Serverspec. Serverspecが内包しているSpecinfraの機能。ホストの情報、取れすぎ、すごい。
おわりに
今の仕事は1年ぐらいやるので、puppetやansible、itamaeといった構成管理ツールと、Serverspecを使ったテストコードをゴリゴリ書いて環境安定に寄与したい。5月いっぱいで基本的なテストコードは書いてしまおうっと。
構成管理はpuppetを今まで使っていて、今後何を使うかは未定の状態なので、今後はエージェントレスのansible/itamaeを早い段階で試して使ってみたいと思う。