LoginSignup
12
12

More than 5 years have passed since last update.

Kirbyとansible_specを組み合せて使ってみた。

Last updated at Posted at 2015-09-14

2015/09/14開催のAnsible Meetup in Tokyoで発表された方、また会場を提供頂いた日経新聞様ありがとうございました。

さて、@ks888skさんがLTで紹介されていたAnsible向けコードカバレッジツール「Kirby」とansible_specを組み合せて使えるのか試してみました。

slideshare - Serverspecを導入したものの放置気味な人へ
ks888の日記 - Ansible向けのコードカバレッジツールKirbyを作りました

総括

結論から言えば、普通に動きました。簡単です。

  • Kirbyはインストールが簡単で導入の敷居が低くて良いです。すぐに使えます。
  • playbookの実行後にテストされていないタスクの洗い出しがされて良いです。テスト不要なタスクをskip指定できるようです。
  • ansible_specは変更不要でした。

はじめに

いきなりKirbyの話ではありませんが少しだけ本の紹介です。

AnsibleとServerspecを組み合せて使う時に、どこまでテストを書くか、あるいはServerspecに何を期待するかを悩ましく思う方は多いと思います。
そもそもAnsibleでは、宣言的な記述やfail-fastといった思想があるので、きちんと実行できている限りはテストは不要です(と考えています)。
過去のQiita投稿記事 [前提]Ansibleの思想とテスト

では、なぜServerspecを使うのか、開発者である宮下さん(@mizzyさん)は著書O'Reilly Japan - ServerspecにてServerspecの開発思想や目標、テストの指針などを述べられています。
Serverspecの技術的な面はWebでも読むことも出来ますが、思想/テストの指針面の説明はあまり多くないので是非読んでみることをお勧めします。
個人的には「3.12 テストコードの指針」以降が参考になると思いますので、節と段落のタイトルだけ引用します。

3.12 テストコードの指針
3.12.1 テストコードを書き始めるタイミング
新規システム
既存システム
インフラコードのモジュール化
3.12.2 どのような観点でテストコードを書くべきか
サーバ構成管理ツールを信頼する
サーバとしての役目を果たすのに必須な部分をテストする
設定内容に詳細まではテストしない
セキュリティ上重要な部分をテストする
サーバのあるべき状態を抽象化する
テストの目的を明確にする

Kirby

検証環境

では、Kirbyの話に戻ります。
環境が全体的に古いので、最新版だと違うかもしれません

$ ansible --version
ansible 1.8.4 (v1.8.4 ebc8d48d34) last updated 2015/02/25 00:00:16 (GMT +900)
  lib/ansible/modules/core: (detached HEAD f22df78345) last updated 2015/02/25 00:01:41 (GMT +900)
  lib/ansible/modules/extras: (detached HEAD 23190986fd) last updated 2015/02/25 00:01:53 (GMT +900)
  v2/ansible/modules/core:  not found - use git submodule update --init v2/ansible/modules/core
  v2/ansible/modules/extras:  not found - use git submodule update --init v2/ansible/modules/extras
  configured module search path = None

serverspec (2.23.1)
ansible_spec (0.2.1)

Kirbyの設定

インストールは、リンク先の通りにしました。
kirby.cfgに以下のように設定しました。
サンプルコード(Github - volanja/ansible-sample-tdd)はこちら

$ cat kirby.cfg 
[defaults]
enable = yes

serverspec_dir = ./
serverspec_cmd = rake serverspec:Ansible-Sample-TDD

Kirbyの実行

いつもどおり、playbookを実行してみたところです。
個人的なポイントは最後にNot tested:が表示されているところで、このテストが不足しているとか、分かりやすいです。

$ ansible-playbook site.yml -i hosts 

PLAY [Ansible-Sample-TDD] ***************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.0.113]

TASK: [nginx | Template nginx.repo] ******************************************* 
changed: [192.168.0.113]
tested by: 

TASK: [nginx | install Nginx] ************************************************* 
changed: [192.168.0.113] => (item=nginx)
tested by: 
- rspec ./roles/nginx/spec/nginx_spec.rb:4 # Package "nginx" should be installed
- rspec ./roles/nginx/spec/nginx_spec.rb:17 # File "/etc/nginx/nginx.conf" should be file
- rspec ./roles/nginx/spec/nginx_spec.rb:18 # File "/etc/nginx/nginx.conf" should contain "worker_connections  1024;"
- rspec ./roles/nginx/spec/nginx_spec.rb:8 # Service "nginx" should be enabled

TASK: [nginx | ensure nginx is running automatically at boot time] ************ 
changed: [192.168.0.113]
tested by: 
- rspec ./roles/nginx/spec/nginx_spec.rb:9 # Service "nginx" should be running
- rspec ./roles/nginx/spec/nginx_spec.rb:13 # Port "80" should be listening

TASK: [nginx | insert iptables rule] ****************************************** 
changed: [192.168.0.113]
tested by: 

TASK: [nginx | Restart iptables] ********************************************** 
changed: [192.168.0.113]
tested by: 

TASK: [mariadb | Template mariadb.repo] *************************************** 
changed: [192.168.0.113]
tested by: 

TASK: [mariadb | Install MariaDB] ********************************************* 
changed: [192.168.0.113] => (item=MariaDB-server,MariaDB-client,MariaDB-common,MariaDB-compat,MariaDB-devel,MySQL-python)
tested by: 
- rspec ./roles/mariadb/spec/mariadb_spec.rb:8 # Service "mysql" should be enabled
- rspec ./roles/mariadb/spec/mariadb_spec.rb:4 # Package "MariaDB-server" should be installed

TASK: [mariadb | chkconfig on MariaDB] **************************************** 
changed: [192.168.0.113]
tested by: 
- rspec ./roles/mariadb/spec/mariadb_spec.rb:13 # Port "3306" should be listening
- rspec ./roles/mariadb/spec/mariadb_spec.rb:9 # Service "mysql" should be running

NOTIFIED: [nginx | restart iptables] ****************************************** 
changed: [192.168.0.113]
tested by: 

PLAY RECAP ******************************************************************** 
*** Kirby Results ***
Coverage  : 44% (4 of 9 tasks are tested)
Not tested:
 - nginx | Template nginx.repo
 - nginx | insert iptables rule
 - nginx | Restart iptables
 - mariadb | Template mariadb.repo
 - nginx | restart iptables
*** Kirby End *******
192.168.0.113              : ok=10   changed=9    unreachable=0    failed=0  

おわりに

Kirbyとansible_specを組み合せて、簡単に使えることを確認しました。
ちなみにテストしない項目はcoverage_skipをタスクのnameに指定するとskipする事ができるようですので、また試してみたいです。

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12