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 ごとの簡単なテストとしては書いといても損はないかもしれない
  • 結局綺麗な状態のホストに対してプロビジョニングしているので意味ないような気もする。