インフラ

[ServerSpec入門]Ansilbeで構築したサーバをServerspecで自動テストする

Serverspecに入門してみました。
Serverspceを使用することで、インフラのテストが自動化できます。
単体テストと呼ばれる、サーバにsshして設定値を詳細設計と見比べて、エビデンスを取得するという不毛な作業が不要になります。   

仮想サーバにインストールして、試してみました。
今回は、Ansibleで構築したサーバをServerspecでテストしています。

Contents

今回のゴール

Ansibleでhttpdをインストールし、Serverspecでhttpdがインストールされているかテストする。

環境

VagrantでServerspecを実行するサーバとされるサーバの2台を作っておきます。
OSはCentOS7.1で作りました。

 
[blogcard url=”https://chariosan.com/2018/07/15/ansible_start/”]

もろもろインストール

hostサーバにツールをインストールします。

yum update

[text]
$ sudo yum update
[/text]

gitインストール

[text]
$ sudo yum install git
[/text]

ansibleインストール

[text]
$ sudo yum install ansible
[/text]

rubyのインストール

Serverspecではrubyが必要なため、インストールします。
以下の記事がわかりやすかったです。rubyのバージョンは「2.3.7」を使います。
 
[blogcard url=”https://qiita.com/NaokiIshimura/items/ff04b6eaa40b33c4bea8″]

serverspecインストール

gemでserverspecを入れます。rakeも必要なので、入れておきます。

[text]
$ gem install rake serverspec
[/text]

フォルダを作成

vagrantの下に以下のフォルダを作っておきます。

[text]
/myproject
├── ansible
└── serverspec
[/text]

ansibleの準備

pingモジュールを使えるとこまで、設定します。
 
[blogcard url=”https://chariosan.com/2018/07/15/ansible_start/”]

serverspecの準備

severspecフォルダに移動して、serverspec-initを実行します。
色々関連ファイルを作ってくれます。

[text]
$ cd serverspec/
$ serverspec-init
elect OS type:

1) UN*X
2) Windows

Select number: 1

Select a backend type:

1) SSH
2) Exec (local)

Select number: 1

Vagrant instance y/n: n
Input target host name: slave
+ spec/
+ spec/slave/
+ spec/slave/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rspec
[/text]

serverspecテストを書く

デフォルトのテストを削除する

serverspecのフォルダに移動しておきます。
[text]
$ cd ~/myproject/serverspec
[/text]

デフォルトのテストは削除します。

[text]
$ rm spec/slave/sample_spec.rb
[/text]

httpdのインストールの有無のテストを書く

今回は「httpdがインストールされているか確認する」テストを作ります。

[text]
$ vi spec/slave/httpd.rb

————–ここからhttpd.rb————–
require ‘spec_helper’

describe package(‘httpd’) do
it { should be_installed }
end
~

[/text]

テストを実行(失敗)

テストを実行してみます。httpdは入っていないので、失敗するはずです。
[text]
$ rake spec
[/text]

Ansibleでhttpdをインストールする

plabybook作成

playbookを書いていきます。

[text]
$ cd ~/myproject/ansible
$ vi playbook.yaml
————-ここからplaybook.yaml————-

– hosts: slave
sudo: yes
tasks:
– name: install httpd
yum: name=httpd state=latest 
[/text]

plabybookを実行して、httpdをインストール

playbookを実行する。
[text]
$ ansible-playbook playbook.yaml
[/text]

Severspceで再度テストする

テスト実行(成功)

再度「rake spec」、成功しました!

[text]
$ rake spec
[/text]

まとめ

AnsibleとServerspecを使うことで、構築〜テストまで自動化することができました。
slaveにssh接続しなくてもいいのがとても嬉しいです。
実案件で使えるレベルまで勉強していきたいです。