[和訳] Chef Client 12.1.0 リリース #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Chef Client 12.1.0 Released (2015/03/03) の和訳です。
シェフのみなさん、こんにちは。
本日、Chef Client 12.1.0のリリースをアナウンスすることを嬉しく思います。このリリースは多数の新機能やバグ修正を含んでいます。ハイライトをいくつか紹介します。詳しい情報は変更履歴、リリースノート、ドキュメントの変更履歴を確認してください。
何が新しいの?
chef_gemのコンパイル時インストールの非推奨
chef_gem Resourceに、コンパイル時にインストールするかどうかを制御するcompile_timeフラグを追加しました。以前の挙動では、このResourceはコンパイル時にインストールすることを強制するという問題がありました。gemがネイティブであると、build_essentialsや他の依存するライブラリをコンパイル時にインストールしていなければならないことを強制するため、コンパイル時の実行を強制することとの争いになっていました。このデフォルトは、収束時に一度だけ実行するようなProviderコード内でlazyな要求をするgemであればよりよい方法で、Recipeコード内で要求するgemではよくない方法であるとわかるまでは意図した設計でした。
デフォルトの挙動は変更しませんが、すべてのchef_gem Resourceは常に警告を発するようになります。
[2015-02-06T13:13:48-08:00] WARN: chef_gem[aws-sdk] chef_gem compile_time installation is deprecated
[2015-02-06T13:13:48-08:00] WARN: chef_gem[aws-sdk] Please set `compile_time false` on the resource to use the new behavior.
[2015-02-06T13:13:48-08:00] WARN: chef_gem[aws-sdk] or set `compile_time true` on the resource if compile_time behavior is required.
これを修正するおすすめの方法は、すべてのchef_gem Resourceでコンパイル時のインストールを明示することです。理由がない限り、デフォルトのfalseに設定することが最善であると覚えておきましょう。
chef_gem 'aws-sdk' do
compile_time false
end
また、Chef::Config[:chef_gem_compile_time]フラグを追加しました。推奨しませんがこれをtrueに設定すると、chef-clientの実行の最初に一度だけ警告を発します。
[2015-02-06T13:27:35-08:00] WARN: setting chef_gem_compile_time to true is deprecated
これでChef 10やChef 11のような挙動をし、chef_gemはデフォルトのコンパイル時インストールを行い、chef-clientの実行時の警告を抑制します。
この設定を'false'に変更すると、Chef 13形式の挙動を採用し、デフォルトですべてのchef_gemはコンパイル時にインストールを行いません。これは既存のCookbookを壊しうるでしょう。
- compile_time trueを要求するすべての既存のCookbookは明示的に設定するように修正しなければいけません。
- 高い品質を求めるならば、compile_time trueを要求するCookbookはこの設定を避けるように書き直さなければいけません。
- compile_time trueを要求しないすべての既存のCookbookは明示的に設定するように修正するべきです。
後方互換性を維持したCookbookにしたければ、respond_to?による判定を用いるとよいでしょう:
chef_gem 'aws-sdk' do
compile_time false if respond_to?(:compile_time)
end
実験的な監査モード機能
インフラの監査を提供するための新機能です。Chefは既にインフラをコードで設定できるようになっていますが、いくつかの事例はResourceの収束では担当できません。Chefで単にインストールしたアプリケーションが正しく機能しているかを確認したいなら? ステータスページを提供しているなら、監査によってそれを確認し、アプリケーションがデータベースとの接続性を持っていることを検証するでしょう。
監査はNode上でServerspecとRSpecを実行することで行われます。書式はRSpecととてもよく似ています。
書式
control_group "Database Audit" do
control "postgres package" do
it "should not be installed" do
expect(package("postgresql")).to_not be_installed
end
end
let(:p) { port(111) }
control p do
it "has nothing listening" do
expect(p).to_not be_listening
end
end
end
この例を用いて、監査のコンポーネントを説明しましょう。
- control_group - 監査フェイズの間に行われるすべての監査を含む名前付きブロックです。Chefの収束の間、Chefの実行の終わりとは別のフェイズで監査が行われます。あらゆるcontrol_groupブロックはNodeで実行するRecipeに定義します。
- control - 実行する監査のセクションを記述するキーワードです。この名前は、テストを行うシステムを記述する文字列か、Serverspec resourceである必要があります。
- it - ブロックの中で、監査を書くためのRSpec expectationsに用います。ここでServerspec resourcesか通常のRubyコードを記述できます。あらゆるエラーは監査を失敗させます。
出力とエラーの取り扱い
監査の出力はChef::Config[:log_location]に従います。もし監査が失敗したら、Chefはエラーを発し、0でないステータスで終了します。
より詳しく
監査について詳しい情報はRFCを参照してください。
OpenBSD package Providerの追加
OpenBSDのpackage Resourceは、OpenBSDシステムではpkg_add経由でインストールする新しいOpenBSDのpackage Providerを用いるようになりました。
大文字・小文字を区別しないURIの取り扱い
以前はURIスキームがすべて大文字を含んでいた場合、ChefはURIを不正として拒否していました。RFC3986に従い、ChefはURIスキームの大文字・小文字を区別しないようになりました。
ファイルの内容の検証 (RFC 027)
RFC 027に基き、fileやfileのようなResourceがverify Attributeを受け付けるようになりました。このAttributeは、実際にディスクに書き込む前に描画したtemplateの内容を検証するための、シェルコマンドとしての文字列やonly_ifのようなRubyブロックを受け付けます。
SSLの警告の抑制
SSL検証がデフォルトで有効になり、SSL検証が無効の場合に出力する警告を抑制しました。
複数パッケージのサポート
package Providerを複数パッケージをサポートするように拡張しました。これはまだまだ新しいものなので、すべてのサブProviderではサポートしていません。完全なサポートはaptとyumのみで実装しています。
例えば、次のように書くことができます。
apt_package ["xml2-dev", "xslt-dev"]
knife bootstrapにおけるvalidatorなしでのブートストラップとChef Vaultの統合
knife bootstrapコマンドがvalidatorなしのブートストラップをサポートしました。validationキーを削除することで有効になります。validationキーが存在しないと、knife bootstrapはブートストラップするNodeのClientを作成するためにUserのキーを利用します。そしてNode Objectを作成し、Environment、run_list、初期Attributeなどを設定します。最初のchef-clientが失敗してNodeのrun_listが正しく保存されない問題を避けるためです。
また、knife vaultとの統合が行われ、knife bootstrapはNodeにChef Vaultアイテムを追加するのにClientキーを使うようになり、Chef Vaultと組み合わせてNodeをブートストラップするのに必要な手順が減りました。
Node Objectがあらかじめユーザによって作成されている場合、validatorなしのブートストラップのサポートはありません。validatorなしのブートストラップが行われた際、この処理で古いNodeやClientは削除されます。validationキーのある古い処理は以前の通りに動作します。最初のknife bootstrapにおけるrun_list、Environment、json Attributeの設定は、必要に応じてNode Objectをまず手動で事前に作成しておくように移行するべきです。
Windowsサービスにタイムアウトの設定ができるように
Windowsサービスを提供するように実行する際、chef-clientの実行時間が設定できるようになりました。client.rbのwindows_service.watchdog_timeoutに必要な秒数を設定できます。デフォルト値は2時間です。
入手するには
ダウンロードページを参照してください。
加えて、Windows以外のプラットフォームでは次のコマンドで最新のChef Clientをダウンロードできます。
curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -v 12.1.0
Windowsでは、次のリンクからこのバージョンをダウンロードできます: Chef Client 12.1.0
助けを得るには
このリリースで何か問題があれば、Githubのissueに登録するか、chefまたはchef-devメーリングリストに報告してください。