ようへいの日々精進XP

よかろうもん

超メモで走り切る 2015 年(2)〜 test-kitchen のドライバが気になったので kitchen-mocoz を作ってみた 〜

追記

ちょっと修正した。

$ kitchen create
-----> Starting Kitchen (v1.4.2)
-----> Creating <エクストラバージン-オリーブオイル>...
       もこみち流 スライスアップルパイ | http://www.ntv.co.jp/zip/mokomichi/3971780.html
       いただきます
       Finished creating <エクストラバージン-オリーブオイル> (0m0.13s).
-----> Kitchen is finished. (0m0.19s)

レシピへの URL を付けた。


tl;dr

qiita.com

@sawanoboly さんの上記の記事を読んで test-kitchen のドライバがどんな風な作りになっているのか気になったので、記事を参考にさせて頂きながらドライバを作ってみた。有難うございますm(__)m

どんなものをつくろうかと考えていたら、kitchen と言えば、俺らの速水もこみちさん、Moco's キッチンだろうと思ったので Moco's キッチンのサイトの掲載されているレシピ一覧からランダムにレシピを取得して表示する test-kitchen と全く関係の無いツールを作ることにした。

www.ntv.co.jp

作ってから気付いたけど、Mocoz ではなくて Moco's なのね...(汗


kitchen-mocoz

作ったもの

github.com

何をするのか

  • こちらのサイトからレシピの一覧を取得してレシピ名を出力する(だけ)
  • test-kitchen 全然関係無い

尚、HTML の解析については、以下のサイトを参考にさせて頂いて nokogiri を利用した。

blog.takuros.net

有難うございます。

demo

  • kitchen init
$ kitchen init
  • .kitchen.yml の作成
---
driver:
  name: mocoz
  mocoz_url: http://www.ntv.co.jp/zip/mokomichi/index.html

provisioner:
  name: ansible_playbook

platforms:
  - name: オリーブオイル

suites:
  - name: エクストラバージン

kitchen-mocoz ドライバの設定としては mocoz_url に Moco's キッチンのサイト URL を指定するだけ。

  • kitchen create(いただきます)
$ kitchen create
-----> Starting Kitchen (v1.4.2)
-----> Creating <エクストラバージン-オリーブオイル>...
       もこみち流 丸鶏と野菜の煮込みスープ
       いただきます
       Finished creating <エクストラバージン-オリーブオイル> (0m0.14s).
-----> Kitchen is finished. (0m0.26s)
  • kitchen destroy(ごちそうさま)
$ kitchen destroy
-----> Starting Kitchen (v1.4.2)
-----> Destroying <エクストラバージン-オリーブオイル>...
       ごちそうさまでした
       Finished destroying <エクストラバージン-オリーブオイル> (0m0.00s).
-----> Kitchen is finished. (0m0.06s)

kitchen create 実行時に Moco'z キッチンのサイトにアクセスしますのでくれぐれも実行しすぎに注意しましょう。


test-kitchen ドライバ作成のことはじめ

kitchen driver

kitchen driver create [name] でひな形を作成する。

$ kitchen driver create sample
      create  kitchen-sample
      create  kitchen-sample/CHANGELOG.md
      create  kitchen-sample/Gemfile
      create  kitchen-sample/Rakefile
      create  kitchen-sample/README.md
      create  kitchen-sample/kitchen-sample.gemspec
      create  kitchen-sample/LICENSE
      create  kitchen-sample/.gitignore
      create  kitchen-sample/.tailor
      create  kitchen-sample/.travis.yml
      create  kitchen-sample/.cane
      create  kitchen-sample/lib/kitchen/driver
      create  kitchen-sample/lib/kitchen/driver/sample_version.rb
      create  kitchen-sample/lib/kitchen/driver/sample.rb
         run  git init from "./kitchen-sample"
Initialized empty Git repository in /path/to/kitchen-sample/.git/
         run  git add . from "./kitchen-sample"

カレントディレクトリに kitchen-sample が作成されている。

$ tree ./kitchen-sample/
./kitchen-sample/
├── CHANGELOG.md
├── Gemfile
├── LICENSE
├── README.md
├── Rakefile
├── kitchen-sample.gemspec
└── lib
    └── kitchen
        └── driver
            ├── sample.rb
            └── sample_version.rb

3 directories, 8 files

合わせて依存関係がある gem をインストールしておく。

$ cd kitchen-sample
$ bundle install

処理を書く

sample.rb は以下のような内容になっている。

require 'kitchen'

module Kitchen

  module Driver

    # Sample driver for Kitchen.
    #
    #
    class Sample < Kitchen::Driver::SSHBase

      def create(state)
      end

      def destroy(state)
      end
    end
  end
end

createdestroy メソッド内に任意の処理を書くことで最低限の動作を確認することが出来そう。

ちょっとだけ注意が必要な点は gemspec ファイルの以下の部分。

spec.add_dependency 'test-kitchen', '~> 1.0.0.alpha.3'

上記が書かれていると、kitchen create する際にインストールされている test-kitchen のバージョンとコンフリクトを起こしてしまうので、自分は削除して対処した。

build する

念の為、タスクを管理。

$ rake -T
rake build          # Build kitchen-sample-0.1.0.dev.gem into the pkg directory
rake cane           # Run cane to check quality metrics
rake install        # Build and install kitchen-sample-0.1.0.dev.gem into system gems
rake install:local  # Build and install kitchen-sample-0.1.0.dev.gem into system gems without network access
rake quality        # Run all quality tasks
rake release        # Create tag v0.1.0.dev and build and push kitchen-sample-0.1.0.dev.gem to Rubygems
rake stats          # Display LOC stats
rake tailor         # Check style

rake build でビルドする。

$ rake build
kitchen-sample 0.1.0.dev built to pkg/kitchen-sample-0.1.0.dev.gem.

install する

rake install:local でインストールする...

$ rake install:local
kitchen-sample 0.1.0.dev built to pkg/kitchen-sample-0.1.0.dev.gem.
rake aborted!
Couldn't install gem, run `gem install /path/to/kitchen-sample/pkg/kitchen-sample-0.1.0.dev.gem' for more detailed output

Tasks: TOP => install:local
(See full trace by running task with --trace)

上記のようなエラーとなるので、gem install でインストールする。

$ sudo gem install /path/to/kitchen-sample/pkg/kitchen-sample-0.1.0.dev.gem

ひとまずインストール完了。


以上

注意

  • kitchen-mocoz はあくまでもネタですので、gem で公開とかは考えていません
  • test-kitchen と全く関係無くてすいません
  • 繰り返しになりますが、kitchen create 実行時に Moco's キッチンのサイトにアクセスしますのでくれぐれも実行しすぎに注意しましょう