追記
ちょっと修正した。
$ 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
@sawanoboly さんの上記の記事を読んで test-kitchen のドライバがどんな風な作りになっているのか気になったので、記事を参考にさせて頂きながらドライバを作ってみた。有難うございますm(__)m
どんなものをつくろうかと考えていたら、kitchen と言えば、俺らの速水もこみちさん、Moco's キッチンだろうと思ったので Moco's キッチンのサイトの掲載されているレシピ一覧からランダムにレシピを取得して表示する test-kitchen と全く関係の無いツールを作ることにした。
作ってから気付いたけど、Mocoz ではなくて Moco's なのね...(汗
kitchen-mocoz
作ったもの
何をするのか
- こちらのサイトからレシピの一覧を取得してレシピ名を出力する(だけ)
- test-kitchen 全然関係無い
尚、HTML の解析については、以下のサイトを参考にさせて頂いて nokogiri を利用した。
有難うございます。
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
create と destroy メソッド内に任意の処理を書くことで最低限の動作を確認することが出来そう。
ちょっとだけ注意が必要な点は 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 キッチンのサイトにアクセスしますのでくれぐれも実行しすぎに注意しましょう