ども、 cloudpack の かっぱ (@inokara) です。
はじめに
最近触れていなかった test-kitchen の復習を兼ねて ansible の Playbook をテストする環境を作ってみた。ドライバとしては kitchen-docker を利用する。Serverspec まで…と思ったけどまた次の機会に。
参考
- neillturner/kitchen-ansible
- kitchen-docker
- test-kitchenのつかいかた
- Ansibleのテストをtest-kitchenとServerspec、dockerで行う
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 test
や kitchen 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
kitchen converge
無事終了。
ということで…
test-kitchen は Chef だけのもではない!
- 久しぶりに test-kitchen + kitchen-docker を触ってみたけど Chef だけのものでは無くなっていた!
- 素晴らしい!
Cookbook も Playbook も…
- 作りっぱではなくてちゃんとテストはしたい
- 次回は Serverspec でのテストまでを行ってみたい
元記事はこちらです。
「boot2docker と test-kitchen で ansible の Playbook をテストする(というか test-kitchen 使い方の復習)」