ども、 cloudpackかっぱ (@inokara) です。

はじめに

最近触れていなかった test-kitchen の復習を兼ねて ansible の Playbook をテストする環境を作ってみた。ドライバとしては kitchen-docker を利用する。Serverspec まで…と思ったけどまた次の機会に。

参考

boot2dockerは…

は既に導入済みという体で進めるが、以下のように DOCKER_HOST 等の情報を .bashrc 等に登録をしておくと色々と捗る。

export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=~/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

念の為に docker info を実行してバージョンを確認しておく。

% docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.18.5-tinycore64
Operating System: Boot2Docker 1.5.0 (TCL 5.4); master : a66bce5 - Tue Feb 10 23:31:27 UTC 2015
CPUs: 4
Total Memory: 1.961 GiB
Name: boot2docker
ID: NHFS:HDNM:RKXG:IA5D:FPKA:MDXU:CCJA:KJ3J:YIFH:YOK3:J3LN:5QLF
Debug mode (server): true
Debug mode (client): false
Fds: 10
Goroutines: 15
EventsListeners: 0
Init Path: /usr/local/bin/docker
Docker Root Dir: /mnt/sda1/var/lib/docker

当初は boot2docker のバージョンが古かったのでこちらを参考に以下のようにバージョンアップを行った。

boot2docker update
boot2docker delete
boot2docker init
boot2docker up

Ansible の Playbook を…

謝辞

参考にさせて頂いた記事が大変参考になりました。

有難うございました!

適当なディレクトリを作成

mkdir -p ansible/sample-pj

関係者の導入

kitchen-docker 並びに kitchen-ansible 等の関係者の導入。

sudo gem install docker --no-ri --no-rdoc -V
sudo gem install test-kitchen --no-ri --no-rdoc -V
sudo gem install kitchend-docker --no-ri --no-rdoc -V
sudo gem install kitchend-ansible --no-ri --no-rdoc -V

以下のように Gemfile にした方が本当は良い(と思う)

source "https://rubygems.org"

gem 'test-kitchen'
gem 'kitchen-ansible'
gem 'kitchen-docker'
gem "docker"

Gemfile を設定したら bundle install をする。

kitchen init

kitchen init --driver=kitchen-docker --provisioner=ansible-playbook

サンプルの Playbook

- hosts: test-kitchen
  sudo: yes
  gather_facts: no
  tasks:
   - name: install the latest version of Apache
     yum: name=httpd state=latest

.kitchen.yml の修正

.kitchen.yml.kitchen.local.yml を利用して該当項目を上書きする。

---
driver:
  name: docker

provisioner:
  name: ansible_playbook

platforms:
  - name: ubuntu-12.04
  - name: centos-6.4

suites:
  - name: default
    run_list:
    attributes:

以下は .kitchen.local.yml

---
driver:
  name: docker

provisioner:
  name: ansible_playbook
  playbook: default.yml
  hosts: test-kitchen

platforms:
  - name: centos-6
    driver_config:
      image: inokappa/centos-ansible
      require_chef_omnibus: false

suites:
  - name: default
    run_list:
    attributes:

上記の状態で kitchen list を実行すると以下のように表示される。

Instance          Driver  Provisioner      Last Action
default-centos-6  Docker  AnsiblePlaybook  Converged

尚、事前に inokappa/centos-ansible というコンテナを作成してそちらを利用することにした。

kitchen create と kitchen login

kitchen create

kitchen create を実行すると centos-6.4 のコンテナが作成されて kitchen testkitchen converge が利用出来る状態となるが、一旦、 kitchen login を実行して作成したコンテナにログインしてみる。

# kitchen list でコンテナの一覧を確認
$ kitchen list
Instance          Driver  Provisioner      Last Action
default-centos-6  Docker  AnsiblePlaybook  Converged

# kitchen login で対象のコンテナにログイン
$ kitchen login default-centos-6
kitchen@192.168.59.103's password:
Last login: Wed Feb 25 07:47:29 2015 from 192.168.59.3
-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
[kitchen@b7b3a97b18cf ~]$

kitchen test

kitchen test

を実行すると以下のように実行される。
boot2docker と test-kitchen で ansible の Playbook をテストする: 動作確認 (1)

さらに、 kitchen converge では…
boot2docker と test-kitchen で ansible の Playbook をテストする: 動作確認 (2)

kitchen converge 無事終了。

ということで…

test-kitchen は Chef だけのもではない!

  • 久しぶりに test-kitchen + kitchen-docker を触ってみたけど Chef だけのものでは無くなっていた!
  • 素晴らしい!

Cookbook も Playbook も…

  • 作りっぱではなくてちゃんとテストはしたい
  • 次回は Serverspec でのテストまでを行ってみたい

元記事はこちらです。
boot2docker と test-kitchen で ansible の Playbook をテストする(というか test-kitchen 使い方の復習)