fbpx

[和訳] Chef Client 12.4.0 リリース #getchef

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿は Chef Client 12.4.0 Released (2015/06/24) の和訳です。

シェフのみなさん、こんにちは。

Chef Client 12.4.0 をリリースしました。このリリースは、よりよいロギングオプション、Windows サポートの改善、Resource DSL の強化など、新要素を多数含んでいます。変更点のうちのいくつかはこれから記載します。すべての変更点を見たければ、変更履歴 を見てください。

何が新しいの?

Chef Server 12.1 における User と Client の Knife キー管理コマンド

knife userknife client は、サブコマンド群の1つとして key サブコマンドを持つようになりました。このサブコマンドは指定の User や Client のキーを一覧表示、作成、削除、編集できます。一人に対して複数の満了キーを持たせるキーローテーションの実装や、基本的なキー管理に用いることができます。サブコマンドのすべてと使い方を確認するには knife user keyknife client key を実行してください。

システムロガー

すべての Chef ログをお好みのロギングシステムに送れるようになりました。

Syslog ロガー

Chef 設定ファイルに次の行を追加することで Syslog を利用できます。


log_location Chef::Log::Syslog.new("chef-client", ::Syslog::LOG_DAEMON)

これは報告者を chef-client、ファシリティを daemon でログを書き込みます。

Windows イベントロガー

Chef 設定ファイルに次の行を追加することで Windows イベントロガーを利用できます。


log_location Chef::Log::WinEvt.new

これはソースを Chef としてアプリケーションログに書き込みます。

remote_file Resource が Windows の UNC パスをサポート

Windows マシンにおいて、remote_file に UNC パスを使えるようになりました。例えば、foohost 上の fooshare から Foo.tar.gz を取得するには、次のようにします。


remote_file 'C:\Foo.tar.gz' do
source "\\\\foohost\\fooshare\\Foo.tar.gz"
end

windows_package Resource が URL をサポート

windows_package Resource が source Attribute に URL を指定できるようになりました。例えば、7zip をインストールするには、次のようにします。


windows_package '7zip' do
source "http://www.7-zip.org/a/7z938-x64.msi"
end

内部的には、指定の URL にあるコンテンツをダウンロードするために remote_file を使っています。もし必要なら、remote_file_attributes Attribute を使って remote_file Resource の Attribute を変更できます。remote_file_attributes は、remote_file に属する Attribute のハッシュを受け付けます。例えば、コンテンツのチェックサムを検証するには、次のようにします。


windows_package '7zip' do
source "http://www.7-zip.org/a/7z938-x64.msi"
remote_file_attributes {
:path => "C:\\7zip.msi",
:checksum => '7c8e873991c82ad9cfcdbdf45254ea6101e9a645e12977dcd518979e50fdedf3'
}
end

Windows Cookbook から容易に移行するために、windows_packagechecksum Attribute も受け付けるので、前述の Resource は次のように書き換えることができます。


windows_package '7zip' do
source "http://www.7-zip.org/a/7z938-x64.msi"
checksum '7c8e873991c82ad9cfcdbdf45254ea6101e9a645e12977dcd518979e50fdedf3'
end

コマンドラインツール用の Powershell ラッパー

Chef Client のインストール中に、C:\opscode\chef\modules\ に対して Powershell モジュールをデプロイできる MSI のオプション機能です。この場所は PSModulePath 環境変数に追加されます。この機能は実験的なので、自動的には有効になりません。有効にするには Powershell セッションで次を実行してください。


Import-Module chef

これを ~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 の Powershell プロファイルに追加することもできます。

このモジュールは、chef-clientknifechef-apply のような、これまで使ってきた Chef のコマンドラインユーティリティと同じ名前を持つ多数のコマンドレットを導入します。これらによって、Powershell コマンドラインで過剰なダブルクォートをせずに、クォート文字列引数をきれいに渡せるようになります。例として https://github.com/chef/chef/issues/3026https://github.com/chef/chef/issues/1687 を見てください。

これまで次のようにしなければならなかったものが、


knife exec -E 'puts ARGV' """&s0meth1ng"""
knife node run_list set test-node '''role[ssssssomething]'''

次のようにするだけで済みます。


knife exec -E 'puts ARGV' '&s0meth1ng'
knife node run_list set test-node 'role[ssssssomething]'

もしラッパーが必要なくなったら、次を実行してください。


Remove-Module chef

LWRP/HWRP 開発者向け: Resource 作成の変更点

Resource は DSL 取得のための resource_name を指定できるように

Resource クラスを記述する際、Recipe DSL を取得する resource_name を呼び出せるようになりました。


module MyModule
class MyResource < Chef::Resource resource_name :my_resource # Names the resource "my_resource" end end

これによって、Recipe 内でこの Resource を使うことができます。


my_resource 'blah' do
end

DSL を持つべきではない 抽象クラスの場合、resource_namenil に設定できます。これは DSL を自動的に取得する Chef::Resource 内のクラスにのみ重要な要素です。


class Chef
class Resource
# This will not have DSL
class MyBaseResource < Chef::Resource resource_name nil end # This will have DSL `my_resource` class MyResource < MyBaseResource end end end

このようにすると、Recipe 内で my_base_resource は動作しません。ただし、my_resource は動作します。

provides で他の DSL 名を提供できます。


module MyModule
class MyResource < Chef::Resource provides :super_resource end end

次のような Recipe が可能になります。


super_resource 'wowzers' do
end

このように provides を使うと、resource_name は my_resource で declared_type は super_resource となることに注意してください。これはほとんどの人に影響はありませんが、注意しておくことなので説明しました。

これにより、Chef::Resource 名前空間に Resource を入れる代わりに、独自の名前空間に Resource を記述できるようになります。

Resource が allowed_actionsdefault_action を使えるように

コンストラクタで Chef::Resource.initialize の上書きと @allowed_actions@action を設定する代わりに、それらを記述するための allowed_actionsdefault_action DSL を使えるようになりました。


class MyResource < Chef::Resource allowed_actions :create, :delete default_action :create end

Resource provides が直感的な自動的ルールを持つように

provides は Resource や Provider が異なる OS 上でどのように Chef Recipe DSL と結び付いているかを示します。複数の Resource や Provider が同じ DSL を提供していると主張する際、それらのルールの優先度を決定するための「特殊ルール」が適用されます。例:


class GenericFile < Chef::Resource provides :file end class LinuxFile < Chef::Resource provides :file, os: 'linux' end class DebianFile < Chef::Resource provides :file, platform_family: 'debian' end

すなわち、次の Recipe を Ubuntu 上で動かすと、DebianFile が選ばれるということです。


file 'x' do
end

これらの Resource を記述した順序に関係なく、Resource の選択システムは Debian ベースのプラットフォームに最も適したルールである DebianFile を選びます。もしプラットフォームが Red Hat のような Debian 以外の Linux なら、次に適したルールである LinuxFile を選びます。

特殊ルールの順序は上から下に次のようになります。

  1. provides :x, platform_version: '12.4.0'
  2. provides :x, platform: 'ubuntu'
  3. provides :x, platform_family: 'debian'
  4. provides :x, os: 'linux'
  5. provides :­x

すなわち、platform_version を指定したクラスはいつも他の provides 行に優先するということです。

複数のクラスが同じ Resource DSL を提供しようとすると警告するように

他の Resource や Provider クラスによって提供される DSL を上書きしようとすると警告が出るようになりました。


class X < Chef::Resource provides :file end class Y < Chef::Resource provides :file end

Y が X を上書きしようとしているとして警告が出ます。これを無効にするには、override: true を使います。


class X < Chef::Resource provides :file end class Y < Chef::Resource provides :file, override: true end

LWRP はもはや自動的には Chef::Resource 名前空間に配置されないように

Chef 12.4.0 から、Chef::Resource 名前空間から名前による LWRP クラスへのアクセスは、非推奨の警告メッセージを出力するようになりました。すなわち、あなたの Cookbook が LWRP の mycookbook/resources/myresource.rb をインクルードしている場合、Ruby コードで Chef::Resource::MycookbookMyresource への拡張や参照ができなくなるということです。LWRP Recipe DSL は変わりません。LWRP は依然として mycookbook_myresource によって Recipe で参照できます。

LWRP クラスを得たければ、Chef::ResourceResolver.resolve(:mycookbook_myresource) として呼び出します。

これの主目的は Chef::Resource 名前空間をきれいにしておくためです。

これらのクラスへの参照は Chef 12 で非推奨となり警告が出るようになり、Chef 13 で削除する予定です。

入手するには?

ダウンロードページを参照してください。

加えて、Windows 以外のプラットフォームでは次のコマンドで最新の Chef Client をダウンロードできます。


curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -v 12.4.0

Windows では、次のリンクからこのバージョンをダウンロードできます: Chef Client 12.4.0

助けを得るには

このリリースで何か問題があれば、Githubのissueに登録するか、chefまたはchef-devメーリングリストに報告してください。

新規CTA