[和訳] Chef Client 12.5 リリース #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Chef Client 12.5 Released (2015/10/08) の和訳です。
Chef Client 12.5 のリリースをアナウンスできてとても嬉しく思います。ダウンロードページ から入手可能です。このリリースはハイライトとして取り上げるいくつもの重要な新機能があります。詳細は以降を読んでください。
新しい Custom Resource モデル
Chef の最もすばらしい点の一つは、容易な拡張性です。特定の問題の領域に対する抽象化した新しい Resource 型を簡単に追加できます。追加してしまえば、積み木のように既存の組み込み Chef Resource を再利用できます。さらに他人の独自の Resource を使うこともできます。この例の一つとして、package、service、template といった Resource を組み合わせて website Resource 型を Chef に追加するといったことが想像できると思います。
Chef Client 12.5 では、独自 Resource を作成するために必要なコード量を徹底的に簡単にしました。特に次の点が挙げられます:
- Cookbook の providers/ ディレクトリに分割 provider を書く必要はもうありません。
- use_inline_resources や whyrun_supported? のような多数のテンプレ文を削除しました。
- Resource 作成の一般的な構文を徹底的に簡略化しました。
加えて、LWRP や HWRP といった扱いにくい単語を使った独自 Resource をもはや言及しません。これからは単に「Custom Resource」であります。
既存の Resource と Provider のコードが動作し続けている間に、皆さんは新しい合理的な構文を正しく評価して使いたくなると私達は考えています。新しい構文についての学習に役立つものをいくつか準備しています:
- このブラウザ内プレゼン資料は、Custom Resource の概念と書き方を紹介しています。
- UI が新しくなった Chef Docs は この件についての最新情報 を含んでいます。
私達は、皆さんがすぐに新しい Custom Resource モデルを使いたくなると考えていますが、誰もがすぐに Chef Client 12.5 を採用できないことも理解しています。移行を慎重に行うために、compat_resource Cookbook を Supermarket に公開しました。これは Chef Client 12.5 に完全に移行するまでに、Chef Client 12.1 から 12.4 までで同じ構文を使えるようにするものです。
最後に、Chef社の主要エンジニアである John Keiser による webinar を 10/28 に開催します。変更点について論じ、新しい言語を用いての Custom Resource の作成例を生中継する予定です。
Recipe でのインラインイベントハンドラ
Chef の他の強力な機能はイベントディスパッチャシステムです。これは Chef Client の実行中の異なる段階(例: Client の登録、収束の開始・終了、実行の失敗など)において、Chef に独自のロジックを実行できる仕組みです。かつてはこの機能を使うのはとても難しいことでした。何故なら、外部にイベントディスパッチャの拡張コードをインストールして登録しなければいけなかったからです。
Chef Client 12.5 では、Recipe 中にコールバックをインラインに書いて登録できるようになりました。任意の Ruby コードをインラインに書くことができ、また Chef の libraries ディレクトリ内のクラスによって提供される1つ以上のメソッドを呼ぶことができます。
Chef Docs に どのように利用するかの例 を記載しました。さらに、ブラウザ内プレゼン資料 で概念の解説を行っています。
この機能の具体的な使い道としては、Chef の実行の最初に etcd のグローバルミューテックスをロックし、実行の最後にロックを解放するハンドラを登録するといったものが挙げられます。これにより、クラスタ内のたった 1台のマシンのみが特定のデータ構造を一度に変更できます。
Chef コミュニティの RFC プロセスを通して、この機能の提案と作成 を行った PagerDuty の Ranjib Dey に感謝します。
Chef Policy の改善
Chef Policy 機能の最終リリースが近づいているので、Chef Client と Server の両方でこれらの機能をサポートするための変更を続けています。Chef Client 12.5 では、policy_name と policy_group を client.rb でディレクティブとして設定するのではなく Node Attribute として使うことで、Chef Client をポリシーモードで動作するよう設定できるようになりました。この機能のすべての恩恵を受けるためには、Chef Server 12.2.0 以上が必要です。
私達は Chef Policy 機能は一般に採用するにはまだ完全ではないと考えていますが、多くのコミュニティのユーザや顧客が Role、Environment、run_list を置き換えるためにこの機能を活用しています。コミュニティメンバーの Michael Hedgpeth が この件に関するすばらしい記事 をブログに書いています。Chef 社の Joshua Timberman による Chef Policy の webinar の録画 を見るか、導入編 のブログ記事を読むことをお勧めします。
まとめ
Chef Client 12.5 では非常に多くの変更があり、それらが意義深くて正当なものであるように多大な注意を払ってきたと考えています。このリリースのすべての新機能と修正したバグについての情報は Chef Client 12.5 リリースノート を読んでください。繰り返しになりますが、Chef をお使いいただきありがとうございます。このリリースを堪能していただけると期待しています。