tkak's tech blog

This is my technological memo.

Opscode Chef のトレーニングに参加してきた。

久々のblog更新。
日本Chef User会のFacebookで紹介されている
Chefのハンズオントレーニングイベントに参加してきました。
Japan Chef Users Group | Facebook

トレーニングの講師は、Opscode社のSean OMeara 氏。
全部英語でしたが、(たぶん)普段普通に話すよりゆっくり話てくれてたのと、
周りのスタッフの方々が通訳してくださって、内容は大体把握できました。
ただ、やっぱり質問は流暢な英語でしたかった(´・ω・`)

また、対象者がChefをさわった事がある方 (初級の上〜中級の下)でしたが、
なぜConfiguration Managementが必要なのか、なぜChefなのかとか、
割りと基本的な話を最初にしてくれて内容整理できてよかったです。


以下、自分が気になったところのまとめです。

cookbookのテストについて

Chef のテストについては、3つ。テストの種類によってツールを使い分ける。

1. unit test -> chef-minitest-hundler

calavera/minitest-chef-handler · GitHub
テストできるところとできないところがるので、使い方を工夫する。

2. integration test -> test-kitchin with vagrant

test-kitchen | RubyGems.org | your community gem host
chefはやっぱりvagrantとの相性がいい。開発環境やテスト環境としてvagrantとchefを組み合わせて使う。
これ使ったことがないので、今度試してみよう。

3. Behavior Test -> cucumber chef

Cucumber-chef
cucumber自体全然使ったことがないので、これも今度試す。

個人的にchefのcookbookを書いていて、テストコードどう書くのか、
ものすごーく気になってたところなんですが、
Seanが言ってたけど(たぶん)、

  • chefのテストにはカバーできない部分がある。
  • UnitTestの中でChefのResource機能の動作をテストするのは無駄。
  • why-run機能を使いなよ。

テストに関してだったり、cookbookの使い方だったり、
まだベストプラクティスっていうのはなくて、
会社ごとにポリシーとかもあるし、各自で試行錯誤するしかないっていうのが、
印象でした。

why-run機能について

ver10.14でリリースされた機能。
chefを実行したときの処理をサーバ側に反映せずに動作確認できる機能です。
この機能はchefの開発が始まった頃からチケットがあって、
何度もclose, reopenを繰り返し、議論されてきたらしい。
元々は、dry-runっていうネーミングで作ってたんだけど、今はwhy-run。
dry-runだと、実行中でシステムに変更を加えない
(ファイルを作成したり、マウントをしたりしない)ので、
real-runを実行したときと差分がでてしまう。
why-runは、実行中にシステムの内容が変わるところもカバーしている。

chef実行時のフォーマットについて

chef-client実行時に、Fオプションで出力結果を変更することができる。

$ sudo chef-client -Fdoc -lfatal --color --why-run

null, doc, minimal, minの4つが現状使用可能。

その他、開発に便利なツールについて

bento

opscode/bento · GitHub
vagrant用baseboxの作成を効率化するツールveeweeをカプセル化するもの。

test-kichin

Integration Test Tool
opscode/test-kitchen · GitHub

foodcritic

link checker, style guide
Foodcritic - A lint tool for your Opscode Chef cookbooks
これはめちゃくちゃ参考になる!色々と間違ってcookbook書いてた。

設定ファイルに設定を追加するためには

rubyで書く場合


Class: Chef::Util::FileEdit

— Documentation for chef (0.8.16)


上記クラスをruby blockの中で使う。

bashで書く場合

bushスクリプトを書いてexecuteで使う。

Chef の処理系について

  1. chef-client実行
  2. build node
  3. authenticate
  4. sync cookbooks(expanded run list)
  5. load cookbooks
  6. converge
  7. success?
  8. if yes -> run
  9. if no -> error