ansible の role を wercker 上で serverspec で test する
ansible の role を serverspec で test をしてみたいと思い、普段使っている wercker で試してみた。
まず、serverspec と ansible が install されている wercker の box を用意した。 次に sample となる role を作った。
soh335/ansible-role-tmux1.9 · GitHub
ディレクトリ構成はこのようにした。
$ tree . ├── LICENSE ├── README.md ├── tasks │ └── main.yml ├── tests │ ├── Rakefile │ ├── inventory.ini │ ├── roles │ │ └── tmux1.9 -> ../../ │ ├── site.yml │ └── spec │ ├── localhost │ │ └── tmux_spec.rb │ └── spec_helper.rb └── wercker.yml
tests ディレクトリ
tests ディレクトリの下に wercker 上で実行される ansible から role を呼び出すための site.yml, inventory.ini を用意した。 また、roles ディレクトリの下に適当な名前(ここでは tmux1.9 ) でシンボリックリンクを貼り、ansible の通常のディレクトリ構成とした。
server spec の test は local 用で生成した。
site.yml
--- - hosts: localhost roles: - tmux1.9
inventory.ini
[localhost] 127.0.0.1
wercker.yml
box: soh335/serverspec-ansible@0.0.1 build: steps: - script: name: apt-get update code: sudo apt-get update - script: name: ansible-playbook code: | cd $WERCKER_SOURCE_DIR sudo ansible-playbook -v tests/site.yml -i tests/inventory.ini -c local - script: name: rake spec code: | cd $WERCKER_SOURCE_DIR/tests rake spec
このような感じで上で用意した site.yml で ansible-playbook の実行、tests ディレクトリで rake spec を実行するようにした。
所感
- wercker の box に対して操作を行っているので os, version が固定されていてるという問題がある 。docker のコンテナに対して操作すべき?(時間かかりそう)
- role ごとの簡単なテストとしては書いといても損はないかもしれない
- 結局綺麗な状態のホストに対してプロビジョニングしているので意味ないような気もする。