Test-Kitchen で成果物の受け入れテストもやる…のはどうやるの

bats 好きなんですよ。なので Test-Kitchen でめっちょテスト書きます。なんとなくふわっとした複合的な要件は Serverspec で書きます。どちらにせよ、アプリじゃ無くてインフラなので、普段の25倍くらいは書きたいところです。

そんでいっぱしのレシピが書けて、クックブックが仕上がって、 git push して、そのあといろんなやり方で実際の環境、成果物をつくりますよね。自分の場合 docker のコンテナと IAM と Vagrant BOX にします。 VPS や自前のハードウェアに展開することが全く無いので、実際の論理マシンに直接 Chef を流すことが今はないのです。

なので、作るのは今 packer を gradle で動かして作ってます。

そこまではいいんですが、じゃあそこで例えば Vagrant の Box ができあがったとして、これもう一回、レシピ作ったときと同じテストにかけたいですよね…。

みんなどうやってるんだろう…。

小生、いまいち検索力が追いつかず、しばし考えた結果、 .kitchen.yml がたとえばこうあったとして

---
provisioner:
  name: chef_solo

platforms:
  - name: hoge
    driver_plugin: vagrant
    driver_config:
      box: oogatta/hoge
      provider: virtualbox
suites:
  - name: default
    run_list:
      - recipe[unko::default]
    attributes:

あったとして、これに

---
provisioner:
  name: chef_solo

platforms:
  - name: hoge
    driver_plugin: vagrant
    driver_config:
      box: oogatta/hoge
      provider: virtualbox
  - name: ukeire
    driver_plugin: vagrant
    driver_config:
      box: ukeire-box # localでaddしたテスト用
      provider: virtualbox

suites:
  - name: default
    run_list:
      - recipe[unko::default]
    attributes:
    excludes:
      - ukeire
  - name: ukeire
    run_list:
    attributes:
    excludes:
      - hoge

受け入れ用の、レシピのないスイートを加えてみることにしました。

当然これ、こうしただけではテスト走りません。

テストは test/integration の下にスイート名のディレクトリを探して実行されるのですが、だからって同じテストのファイルを2箇所に置いてもしようがないですからためしにリンクしてみたら、なんとそれでうまく走りました。

$ cd test/integration
$ ln -s default ukeire

しかし、スイートとレシピ名ごっちゃになってよく混乱しますよね。ここはレシピ名なんだっけ…スイート名なんだっけ…っていう。でもこれで

$ vagrant box add --name ukeire-box fugafuga.box
$ kitchen test ukeire

できます。

終わりです。