[和訳] リリースノート: chef-client 12.0.x (2014/12/17) #opschef_ja #getchef_ja
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Release Notes: chef-client 12.0 (2014/12/17) 時点の和訳です。
(Chefについてのまえがき:省略)
何が新しいのか
次はchef-client 12.0における新機能か以前のバージョンからの変更点の要約です。
- Windows版ではRuby 2.0以上、Unix/Linux版ではRuby 2.1以上。Ruby 1.8.7、1.9.1、1.9.2、1.9.3はもはやサポートしません。詳細はブログ記事 (訳注: [和訳] Ruby 1.9.3 の EOL と Chef 12)を参照してください。
- chef-clientがAIXプラットフォームをサポート。chef-clientはAIXプラットフォームのバージョン6.1 (TL6かそれ以上を推奨)と7.1 (TL0 SP3かそれ以上を推奨)で動作するNodeを管理できます。service Resourceは、BSDベースのinitシステムと同じようにすべてのサービスの状態を管理する、System Resource Controller (SRC)で管理されているサービスの開始、停止、再起動をサポートします。
- bff_package Resourceの追加。bff_package Resourceは、AIXプラットフォームにおいてパッケージをインストールするために用います。
- homebrew_package Resourceの追加。homebrew_package Resourceは、Mac OS Xプラットフォームにおいてパッケージをインストールするために用います。また、homebrew_package Resourceは、Mac OS Xプラットフォームにおいてデフォルトのパッケージインストーラであるmacports_package Resourceを置き換えます。
- reboot Resourceの追加。reboot Resourceは、chef-clientの動作の最中または最後にNodeを再起動するために用います。
- windows_service Resourceの追加。windows_service Resourceは、Microsoft Windowsプラットフォームでサービスを管理するために用います。
- --bootstrap-templateオプションの追加。--bootstrap-templateオプションは、ブートストラップテンプレートを用いてchef-clientをインストールするために用います。chef-fullのようなテンプレート名を指定するか、独自ブートストラップテンプレートへのパスを指定します。このオプションは--distroオプションと--template-fileオプションを廃止予定とします。
- ブートストラップ処理にSSLオプションを追加。knife bootstrapサブコマンドにブートストラップ処理でSSLをサポートする新しいオプションを追加しました。--[no-]node-verify-api-certオプションを用いることで、Chef Serverとの通信でSSL検証を行います。--node-ssl-verify-modeオプションを用いることで、SSL証明書を検証します。
- knife statusにフォーマットオプションを追加。--mediumオプションと--longオプションで、出力にAttributeを含めたり、出力をJSON形式にしたりできます。
- mount Resourceにfsck_device Attributeを追加。mount Resourceにfsck_device Attributeを用いることで、Solarisプラットフォームのfsckデバイスをサポートします。
- metadata.rbの新しい設定項目。metadata.rbファイルにissues_urlとsource_urlの2つの新しい設定項目を追加しました。これらの設定はCookbookのイシュートラッカーの場所とソースの場所を取得するために用います。これらはChef Supermarketでも用いられます。加えて、name設定が必須になりました。
- http_requestのGETリクエストとHEADリクエストの決め打ちクエリ文字列の廃止。:getと:head Actionは、上書きできない?message=resource_nameという決め打ちのクエリ文字列を付与していました。この決め打ち文字列はchef-client 12.0リリースで廃止されました。この文字列に依存していたCookbookは、このResourceに渡すように、URLにこの文字列を手動で追加する必要があります。
- Recipe DSLメソッドの追加。Recipe DSLに3つの新しいメソッドを追加しました: shell_out, shell_out!, shell_out_with_systems_locale
- File specificityの更新。template Resourceとcookbook_file Resourceが配列として明示的に検索パスを定義するためのsource Attributeをサポートしました。
- Mac OS Xプラットフォームにおいて、user Resourceのユーザパスワードセキュリティの改善。user ResourceがMac OS X 10.7以上にてソルト付パスワードハッシュをサポートしました。iterations Attributeとsalt Attributeを用いることで、Mac OS Xバージョン10.7ではSALTED-SHA512パスワードShadowハッシュを、Mac OS Xバージョン10.8以上ではSALTED-SHA512-PBKDF2パスワードShadowハッシュを計算するようになります。
- Recipe DSLのdata_bag_itemメソッドが暗号化Data Bat Itemをサポート。data_bag_item(bag_name, item, secret)として、暗号化Data Bag Itemのためのシークレットを指定できます。secretが指定されなければ、chef-clientはclient.rbファイルのencrypted_data_bag_secret設定で指定されたパスのシークレットを検索します。
- Recipe DSLのvalue_for_platformメソッドがバージョン制約をサポート。>, <, >= <= ~>といったバージョン制約をバージョン指定時に利用できるようになりました。もし2つのバージョン制約にマッチした場合例外が発生します。完全マッチは、バージョン制約によるマッチより常に優先度が上となります。
- knife cookbook site shareが--dry-runをサポート。knife cookbook siteに--dry-runオプションを用いることで、何も動作せずに結果だけを表示します。
- chef-client設定の更新。chef-clientは、--override-runlistオプション経由でNodeのCookbookキャッシュを消去することなしにrun-listを上書きしての動作をサポートしました。加えて、--chef-zero-portオプションはポートのレンジ指定が可能になりました。
- フォークしない定期実行のサポート廃止。--[no-]forkオプションは同じコマンドである--daemonizeオプションと--intervalオプションによって廃止されます。
- sprayとintervalの値をchef-clientの実行前に適用。--intervalと--splayの値は、chef-clientとchef-soloの実行ファイルで用いたとき、chef-clientの実行前に適用されます。
- Cookbook内のすべてのfilesとtemplatesはchef-clientの実行の最初に同期。client.rbファイルのno_lazy_load設定はデフォルトでtrueになりました。cookbook_file Resourceやtemplate Resourceが収束するより前に、Cookbookマニフェスト内の時間に敏感なURLがタイムアウトする問題を避けるためです。
- ファイルをデフォルトで宛て先のディレクトリに仮置き。/tmpや/var/tmpといったシステムの一時ファイルを置くディレクトリにファイルを仮置きすることは、宛て先ディレクトリに置くことと異なり、パーミッション、空き領域、デバイス間のリネームで問題を起こす可能性がありました。そこでデフォルトでファイルを宛て先のディレクトリに仮置きするようになりました。
- Partial Searchの更新。検索結果をハッシュに組み立てる際に:filter_resultを用います。これは以前から提供されていたpartial_search Cookbookの機能を、異なるAPIを用いて置き換えます。指定のフィルタにマッチしたAttributeのみを得るには--filter-resultオプションを用います。例: \"ServerName=name, Kernel=kernel.version\"
- デフォルトでクライアントサイドで鍵生成。validation Clientアカウントを用いて新しいChef Clientを作った際、Chef ServerはChef Clientにローカルで鍵ペアを作成させて、Chef Serverに公開鍵を送らせます。この動作はclient.rbファイルのlocal_key_generation Attributeにて制御されており、デフォルトがtrueとなりました。
- guard_interpreterにデフォルトのAttributeを追加。guard_interpreter Attributeはデフォルトでbatch Resourceでは:batchに、powershell_script Resourceでは:powershell_scriptになりました。
- Windowsプラットフォームでイベントをアプリケーションイベントログにデフォルトで送信。chef-clientの実行の最初と最後に、またchef-clientが失敗した場合に、イベントがMicrosoft Windows「アプリケーション」イベントログに送信されます。client.rbファイルのdisable_event_logger設定をtrueとすると、イベントログの送信を無効にします。
- windows_package Resourceのinstaller_type Attributeは文字列の代わりにシンボルを用いるように変更。バージョン11.8からこれまでのchef-clientは文字列を用いていました。
- execute Resourceのpath Attributeを廃止予定に。代わりにenvironment Attributeを用いてください。
- Attributeの動作の変更。chef-client 12での、指定の優先度のAttributeキーをどう削除するか、すべての優先度のAttributeキーをどう削除するか、指定の優先度の入れ子の値をどう上書きするか、ということを含むAttributeの重要な変更はRFC-23を見てください。加えて、node.default!はnode.force_defaultに、node.override!はnode.force_overrideになりました。
- SSL証明書の検証の改善: SSL証明書の検証のデフォルト設定が、検証結果を尊重するようになりました。加えて、knife ssl fetchコマンドの使用がWorkstationを設定する際の重要な手順になりました。
AIXプラットフォームサポート
chef-clientはAIXプラットフォームバージョン6.1 (TL6以上を推奨)と7.1 (TL0 SP3以上を推奨)で動作するNodeを設定できるようになりました。service Resourceは、BSDベースのinitシステムと同じようにすべてのサービスの状態を管理する、System Resource Controller (SRC)で管理されているサービスの開始、停止、再起動をサポートします。
システム要件
chef-clientは他のプラットフォームと同じく、AIXプラットフォームでも同様のシステム要件を持ちますが、次の注意があります。
- AIXプラットフォームでファイルシステムを拡張するにはchfsを用いるか、自動的に論理パーティション(LPAR)を拡張するためinstallpに-Xフラグを渡します。
- chef-clientをインストールするより先に、論理パーティションにEN_US (UTF-8)キャラクタセットをインストールしてください。詳しくは次項を参照してください。
chef-clientをAIXプラットフォームにインストール
chef-clientはBackup File Format (BFF)として配布しており、rootユーザで次のコマンドを実行することでAIXプラットフォームにインストールできます。
# installp -aYgd chef-12.0.0-1.powerpc.bff all
システムプロセス上限の増加
システムをすぐ使い始めると大抵の場合、プロセスメモリの最大サイズ(RSS)や開けるファイルの数といったシステムプロセスの上限値は、論理パーティション(LPAR)でchef-clientを実行するには低すぎます。システムプロセス上限が低すぎると、chef-clientはスレッドを作成できません。システムプロセス上限を増やすには次のようにします。
- システムプロセスの上限が増やされていないことを確認します。
-
増やされていなければ、次のコマンドをrootユーザで実行します。
$ chsec -f /etc/security/limits -s default -a "rss=-1"
$ chsec -f /etc/security/limits -s default -a "nofiles=50000"
- システムプロセスの上限の更新を適用するため、論理パーティション(LPAR)を再起動します。
UTF-8キャラクタセットのインストール
chef-clientはEN_US (UTF-8)キャラクタセットを利用します。デフォルトでは、AIX基本オペレーティングシステムはEN_US (UTF-8)キャラクタセットを含まないので、chef-clientのインストールより先にインストールしなければいけません。EN_US (UTF-8)キャラクタセットはAIXメディアの最初のディスクからインストールするか、/installp/ppc/*EN_US*から論理パーティション(LPAR)の位置にコピーします。ここではその位置を/tmp/rteとします。
EN_US (UTF-8)キャラクタセットをインストールするにはsmitを用います。これで、あらゆるワークロードパーティション(WPAR)もUTF-8が適用されます。
CDからインストールしていない場合、INPUT device/directoryが/tmp/rteを示すことを覚えておいてください。
-
rootシェルから次を実行します。
# smit lang
次のような画面が表示されます。
Manage Language Environment
Move cursor to desired item and press Enter.
Change/Show Primary Language Environment
Add Additional Language Environments
Remove Language Environments
Change/Show Language Hierarchy
Set User Languages
Change/Show Applications for a Language
Convert System Messages and Flat FilesF1=Help F2=Refresh F3=Cancel F8=Image
F9=Shell F10=Exit Enter=Do -
Add Additional Language Environmentsを選択し、Enterキーを押下します。次のような画面が表示されます。
Add Additional Language Environments
Type or select values in entry fields.
Press Enter AFTER making all desired changes.[Entry Fields]
CULTURAL convention to install +
LANGUAGE translation to install +
* INPUT device/directory for software [/dev/cd0] +
EXTEND file systems if space needed? yes +WPAR Management
Perform Operation in Global Environment yes +
Perform Operation on Detached WPARs no +
Detached WPAR Names [_all_wpars] +
Remount Installation Device in WPARs yes +
Alternate WPAR Installation Device []F1=Help F2=Refresh F3=Cancel F4=List
F5=Reset F6=Command F7=Edit F8=Image
F9=Shell F10=Exit Enter=Do - カーソルをCULTURAL convention to installとLANGUAGE translation to installの最初の2つのエントリに合わせて、UTF-8 English (United States) [EN_US]が選択されるまでF4でリストを移動します。EN_USは大文字です!
- Enterを押下して言語セットを適用、インストールします。
新しいProvider
service Resourceに2つの新しいProviderが追加されました。
ロングネーム | ショートネーム | 注釈 |
---|---|---|
Chef::Provider::Service::Aix | service | このProviderはAIXプラットフォームで用いられます。serviceショートネームを用いると、System Resource Controller (SRC)でサービスの起動、停止、再起動を行います。 |
Chef::Provider::Service::AixInit | service | AIXでBSDベースのinitサービスの管理に用いるProviderです。 |
AIXでmkitabコマンドを用いるサービスの有効化
service Resourceは、System Resource Controller (SRC)を用いて管理しているResourceについて、:enableと:disableの使用をサポートしていません。これは、System Resource Controller (SRC)が、システム起動時にサービスを有効化/無効化するための標準的な機構を持っていないためです。
System Resource Controller (SRC)で管理しているサービスを有効化/無効化する1つの方法として、execute Resourceを用いてmkitabを呼び出し、このコマンドでサービスを有効化/無効化します。
次はどのようにサービスをインストールするかの例です。
execute "install #{node['chef_client']['svc_name']} in SRC" do
command "mkssys -s #{node['chef_client']['svc_name']}
-p #{node['chef_client']['bin']}
-u root
-S
-n 15
-f 9
-o #{node['chef_client']['log_dir']}/client.log
-e #{node['chef_client']['log_dir']}/client.log -a '
-i #{node['chef_client']['interval']}
-s #{node['chef_client']['splay']}'"
not_if "lssrc -s #{node['chef_client']['svc_name']}"
action :run
end
mkitabコマンドを用いてサービスを有効化します。
execute "enable #{node['chef_client']['svc_name']}" do
command "mkitab '#{node['chef_client']['svc_name']}:2:once:/usr/bin/startsrc
-s #{node['chef_client']['svc_name']} > /dev/console 2>&1'"
not_if "lsitab #{node['chef_client']['svc_name']}"
end
bff_package
bff_package Resourceは、installpユーティリティを用いるAIXプラットフォームでパッケージを管理します。ローカルファイルからパッケージをインストールする際は、remote_file Resourceかcookbook_file Resourceを用いてNodeにファイルを追加しなければいけません。
注意
Backup File Format (BFF)パッケージは.bffファイル拡張子を持っていないかもしれません。chef-clientはファイル拡張子に関わらず、プラットフォームに基いて適切なProviderを選択します。
書式
Recipeでのbff_package Resourceの書式は次の通りです。
bff_package "name" do
attribute "value" # 次項を参照
...
action :action # 次項を参照
end
- bff_packageは、chef-client実行中、chef-clientがChef::Provider::Package::Aix Providerを用いるようにします。
- nameはResourceブロックの名前です。package_name AttributeがRecipeの一部として指定されていない場合、nameはパッケージの名前にもなります。
- attributeはこのResourceに有効な0個以上のAttributeです。
- :actionは、chef-clientがNodeをあるべき状態にするための手順を指定します。
Action
このResourceが取り得るActionです。
Action | 解説 |
---|---|
:install | デフォルト値。パッケージをインストールします。バージョンが指定されていたら、パッケージの指定のバージョンをインストールします。 |
:remove | パッケージを削除します。 |
:purge | パッケージを削除します。このActionは通常、パッケージと同じように設定ファイルも削除します。 |
Attribute
このResourceが取り得るAttributeです。
Attribute | 解説 |
---|---|
options | コマンドに渡す1つ以上の追加オプションです。 |
package_name | パッケージの名前です。デフォルト値はResourceブロックのnameです。詳しくは前述のSyntax節を見てください。 |
provider | 任意値。Providerを明示的に指定します。詳しくは後述のProvider節を見てください。 |
response_file | 任意値。パッケージの事前設定ファイルへの直接パスです。 |
source | 必須値。ローカルファイルシステムのパッケージへのパスを指定します。AIXプラットフォームでは、installpがHTTPやFTPでファイルの取得を行わないため、sourceでローカルファイルシステムのパスを指定しなければいけません。 |
version | インストールまたはアップグレードするパッケージのバージョンです。 |
Provider
このResourceは次のProviderを持ちます。
ロングネーム | ショートネーム | 注釈 |
---|---|---|
Chef::Provider::Package | package | このショートネームが用いられた場合、chef-clientは動作時に適切なProviderを決定します。 |
Chef::Provider::Package::Aix | bff_package | AIXプラットフォームで用いるProviderです。options Attributeと利用できます。 |
例
パッケージのインストール
bff_package ResourceはAIXプラットフォームのデフォルトパッケージProviderです。基本のpackage Resourceが使われた場合、プラットフォームがAIXならば、chef-clientは適切なProviderを選択します。次はIBM XL C/C++コンパイラの一部をどのようにインストールするかの例です。
基本のpackage Resourceを使う場合:
package "xlccmp.13.1.0" do
source "/var/tmp/IBM_XL_C_13.1.0/usr/sys/inst.images/xlccmp.13.1.0"
action :install
end
bff_package Resourceを使う場合:
bff_package "xlccmp.13.1.0" do
source "/var/tmp/IBM_XL_C_13.1.0/usr/sys/inst.images/xlccmp.13.1.0"
action :install
end
homebrew_package
Mac OS Xプラットフォームでパッケージを管理するにはhomebrew_package Resourceを用いてください。
書式
Recipeでのhomebrew_package Resourceの書式は次の通りです。
homebrew_package "name" do
attribute "value" # 次項を参照
...
action :action # 次項を参照
end
- homebrew_packageは、chef-client実行中、chef-clientがChef::Provider::Package::Homebrew Providerを用いるようにします。
- nameはResourceブロックの名前です。package_name AttributeがRecipeの一部として指定されていない場合、nameはパッケージの名前にもなります。
- attributeはこのResourceに有効な0個以上のAttributeです。
- :actionは、chef-clientがNodeをあるべき状態にするための手順を指定します。
Action
このResourceが取り得るActionです。
Action | 解説 |
---|---|
:install | デフォルト値。パッケージをインストールします。バージョンが指定されていたら、パッケージの指定のバージョンをインストールします。 |
:upgrade | パッケージをインストールし、最新バージョンとします。 |
:remove | パッケージを削除します。 |
:purge | パッケージを削除します。このActionは通常、パッケージと同じように設定ファイルも削除します。 |
Attribute
このResourceが取り得るAttributeです。
Attribute | 解説 |
---|---|
homebrew_user | コマンド実行時にchef-clientによって用いられるHomebrewの所有者の名前です。デフォルトでは、chef-clientはHomebrewコマンドを/usr/local/bin/brewの所有者として実行しようとします。この実行ファイルが存在しない場合、chef-clientはwhich brewを実行してユーザを探そうとします。もし実行ファイルを見つけられなければ、chef-clientは次のエラーメッセージを表示します「Could not find the "brew" executable in /usr/local/bin or anywhere on the path.」homebrew_user Attributeは、chef-clientが自動的に正しい所有者を検知できない状況のために、Homebrewの所有者を指定するために用います。 |
options | コマンドに渡す1つ以上の追加オプションです。 |
package_name | パッケージの名前です。デフォルト値はResourceブロックのnameです。詳しくは前述のSyntax節を見てください。 |
provider | 任意値。Providerを明示的に指定します。詳しくは後述のProvider節を見てください。 |
response_file | 任意値。パッケージの事前設定ファイルへの直接パスです。 |
source | 任意値。ローカルファイルシステムのパッケージへのパスを指定します。 |
version | インストールまたはアップグレードするパッケージのバージョンです。 |
Provider
このResourceは次のProviderを持ちます。
ロングネーム | ショートネーム | 注釈 |
---|---|---|
Chef::Provider::Package | package | このショートネームが用いられた場合、chef-clientは動作時に適切なProviderを決定します。 |
Chef::Provider::Package::Homebrew | homebrew_package | Mac OS Xプラットフォームで用いるProviderです。 |
例
パッケージのインストール
homebrew_package "name of package" do
action :install
end
UUIDでHomebrewユーザを指定
homebrew_package 'emacs' do
homebrew_user 1001
end
文字列でHomebrewユーザを指定
homebrew_package 'vim' do
homebrew_user 'user1'
end
reboot
特定のプラットフォームでのインストール時の必要に応じて、Nodeを再起動するにはreboot Resourceを用いてください。
警告
rebootはどのような通知でも:immediatelyを通知タイマーとして用いなければいけません。
書式
Recipeでのreboot Resourceの書式は次の通りです。
reboot "name" do
attribute "value" # 次項を参照
...
action :action # 次項を参照
end
- rebootは、chef-client実行中、chef-clientがChef::Provider::Reboot Providerを用いるようにします。
- nameはResourceブロックの名前です。
- attributeはこのResourceに有効な0個以上のAttributeです。
- :actionは、chef-clientがNodeをあるべき状態にするための手順を指定します。
Action
このResourceが取り得るActionです。
Action | 解説 |
---|---|
:cancel | 再起動要請を中止します。 |
:reboot_now | chef-clientがインストール処理を続けるためにNodeを再起動します。 |
:request_reboot | chef-clientの実行の最後でNodeを再起動します。 |
Attribute
このResourceが取り得るAttributeです。
Attribute | 解説 |
---|---|
delay_mins | 再起動要請までの時間を分で指定します。 |
reason | 再起動の理由を記述する文字列です。 |
Provider
このResourceは次のProviderを持ちます。
ロングネーム | ショートネーム | 注釈 |
---|---|---|
Chef::Provider::Reboot | reboot | Nodeの再起動に用いるProviderです。 |
例
ただちにNodeを再起動
reboot "now" do
action :nothing
reason "Cannot continue Chef run without a reboot."
delay_mins 2
end
execute 'foo' do
command '...'
notifies :reboot_now, 'reboot[now]', :immediately
end
chef-clientの実行の最後でNodeを再起動
reboot "app_requires_reboot" do
action :request_reboot
reason "Need to reboot when the run completes successfully."
delay_mins 5
end
再起動を中止
reboot "cancel_reboot_request" do
action :cancel
reason "Cancel a previous end-of-run reboot request."
end
windows_service
Microsoft Windowsプラットフォームでサービスを管理するにはwindows_service Resourceを用いてください。
書式
Recipeでのwindows_service Resourceの書式は次の通りです。
windows_service "name" do
attribute "value" # 次項を参照
...
action :action # 次項を参照
end
- windows_serviceは、chef-client実行中、chef-clientがChef::Provider::Service::Windows Providerを用いるようにします。
- nameはResourceブロックの名前です。service_name AttributeがRecipeの一部として指定されていない場合、nameはサービスの名前にもなります。
- attributeはこのResourceに有効な0個以上のAttributeです。
- :actionは、chef-clientがNodeをあるべき状態にするための手順を指定します。
Action
このResourceが取り得るActionです。
Action | 解説 |
---|---|
:configure_startup | startup_type Attributeの値に基いてサービスを設定します。 |
:disable | サービスを無効化します。このActionはMicrosoft WindowsプラットフォームのDisabledスタートアップ・タイプと同等です。 |
:enable | 起動時のサービスを有効化します。このActionはMicrosoft WindowsプラットフォームのAutomaticスタートアップ・タイプと同等です。 |
:nothing | デフォルト値。サービスに何も行いません。 |
:reload | サービスの設定を再読み込みします。 |
:restart | サービスを再起動します。 |
:start | サービスを起動し、停止するか無効化するまで実行し続けます。 |
:stop | サービスを停止します。 |
Attribute
このResourceが取り得るAttributeです。
Attribute | 解説 |
---|---|
init_command | サービスに関連付けられたinitscriptへのパスを指定します。これは通常/etc/init.d/SERVICE_NAMEです。init_command Attributeはstart_command Attribute、stop_command Attribute、restart_command Attributeを上書き指定する必要がないようにします。デフォルト値: nil |
pattern | プロセステーブルの検索パターンです。デフォルト値: service_name |
provider | 任意値。Providerを明示的に指定します。詳しくは後述のProvider節を見てください。 |
reload_command | サービスに設定の再読み込みを促すコマンドです。 |
restart_command | サービスを再起動するコマンドです。 |
service_name | サービスの名前です。デフォルト値はResourceブロックのnameです。詳しくは前述のSyntax節を見てください。 |
start_command | サービスを起動するコマンドです。 |
startup_type | Microsoft Windowsサービスのスタートアップ・タイプを指定します。取り得る値::automatic, :disabled, :manual デフォルト値: :automatic |
status_command | サービスの実行状態を確認するコマンドです。 |
stop_command | サービスを停止するコマンドです。 |
supports | chef-clientがサービスをどのように制御するかを示したAttributeのリストです。:restart、:reload、:statusを取ります。 :restartを指定すると、initscriptや他のservice Providerがrestartコマンドを利用できます。:restartを指定されなければ、chef-clientはサービスを停止してから起動しようとします。 :reloadを指定すると、initscriptや他のservice Providerがreloadコマンドを利用できます。 :statusを指定すると、サービスが起動しているかどうかを確認するためにinitscriptや他のservice Providerがstatusコマンドを利用できます。:statusを指定されなければ、chef-clientは、パラメータのAttributeとしてパターンが指定されていなければ、正規表現を用いプロセステーブルからservice_nameがマッチするか確認しようとします。 Red Hatプラットフォーム以外のデフォルト値: { :restart => false, :reload => false, :status => false } Red Hatプラットフォームのデフォルト値: { :restart => false, :reload => false, :status => true } |
Provider
windows_service Resourceはサービス指定のショートネームを持ちません。chef-clientを実行するたびにOhaiによって収集されたデータに基いてプラットフォームを特定するからです。chef-clientはprovider_mapping.rbファイルでプラットフォームを探し、プラットフォームに適したProviderを決定します。Nodeに1つ以上のinitシステムがあるような特別な状況では、provider AttributeとProviderのロングネームを用いて、Providerを指定する必要があるかもしれません。
このResourceは次のProviderを持ちます。
ロングネーム | ショートネーム | 注釈 |
---|---|---|
Chef::Provider::Service::Windows | windows_service | Microsoft Windowsプラットフォームで用いるProviderです。 |
例
手動でサービスを起動
windows_service "BITS" do
action :configure_startup
startup_type :manual
end
knife bootstrap設定
次のオプションが追加されました。
--[no-]node-verify-api-cert
Chef ServerのSSL証明書を検証します。trueの場合、chef-clientは常にSSL証明書を検証します。falseの場合、chef-clientはSSL証明書の検証が必要かどうか決定するのにssl_verify_modeの値を利用します。このオプションが指定されていなければ、設定ファイル中のverify_api_certの設定を適用します。
--node-ssl-verify-mode PEER_OR_NONE
HTTPSリクエストの検証モードです。
SSL証明書の検証を行わない場合はnoneを指定します。
Chef Serverとの接続、S3との接続、chef-clientの動作内のremote_file Resourceを用いたあらゆるHTTPSを含むすべてのSSL証明書の検証を行う場合はpeerを指定します。この設定を推奨します。
このオプションが指定されなければ、設定ファイル内のssl_verify_modeの設定が適用されます。
-t TEMPLATE, --bootstrap-template TEMPLATE
使用するブートストラップテンプレートを指定します。例えばchef-fullのようなブートストラップテンプレートの名前を指定したり、独自のブートストラップを定義したEmbedded Ruby (ERB)テンプレートへのフルパスを指定したりします。デフォルト値は、すべてのサポートされたプラットフォームでのOmnibusインストーラを用いてchef-clientをインストールするchef-fullです。
注意
--distroオプションと--template-fileオプションは廃止予定です。
knife status設定
次のオプションが追加されました。
-l, --long
すべてのAttributeをJSONで出力します。
-m, --medium
Normal AttributeをJSONで出力します。
fsck_device Attribute
mount Resourceに次のAttributeが追加されました。
Attribute | 解説 |
---|---|
fsck_device | Solarisプラットフォームでのfsckデバイスを指定します。デフォルト値: - |
metadata.rb設定
次の設定が追加されました。
設定 | 解説 |
---|---|
issues_url | CookbookのイシュートラッキングのURLです。この設定はChef Supermarketでも用いられます。
|
source_url | CookbookのソースコードのURLです。この設定はChef Supermarketでも用いられます。
|
警告
name Attributeはmetadata.rbファイルで必須の設定になりました。
http_request Action
:getと:head Actionは、上書きできない?message=resource_nameという決め打ちのクエリ文字列を付与していました。この決め打ち文字列はchef-client 12.0リリースで廃止されました。この文字列に依存していたCookbookは、このResourceに渡すように、URLにこの文字列を手動で追加する必要があります。
Recipe DSL
次のメソッドがRecipe DSLに追加されました: shell_out, shell_out!, shell_out_with_systems_locale
shell_out
shell_outメソッドはNodeでコマンドを実行し、ログレベルがdebugならば出力をコンソールに表示します。
shell_outメソッドの書式は次の通りです。
shell_out(command_args)
command_argsはNodeで実行するコマンドです。
shell_out!
shell_out!メソッドはNodeでコマンドを実行し、ログレベルがdebugならば出力をコンソールに表示し、メソッドがfalseを返したら例外を発生します。
shell_out!メソッドの書式は次の通りです。
shell_out!(command_args)
command_argsはNodeで実行するコマンドです。このメソッドはtrueまたはfalseを返します。
shell_out_with_systems_locale
shell_out_with_systems_localeメソッドは、shell_outメソッドを通して、LC_ALL環境変数を用いてNodeでコマンドを実行します。
shell_out_with_systems_localeメソッドの書式は次の通りです。
shell_out_with_systems_locale(command_args)
command_argsはNodeで実行するコマンドです。
value_for_platform
value_for_platformヘルパーは、>=や ~>といった、7.0.<buildnumber>のようなバージョン番号を解決する助けとなるバージョン制約を使えるようにします。例:
value_for_platform(
"redhat" => {
"~> 7.0" => "version 7.x.y"
">= 8.0" => "version 8.0.0 and greater"
}
}
注意
もし2つのバージョン制約にマッチし、あいまいな場合は例外が発生します。ただし、完全マッチは、バージョン制約によるマッチより常に優先度が上となります。
File Specificity
File Specificityのパターンは、検索パスとsource Attributeという2つの要素に依存しています。パターンは次のようになります。
- /host-$fqdn/$source
- /$platform-$platform_version/$source
- /$platform/$source
- /default/$source
- /$source
source Attributeに配列を用いて、明示的な検索パスを定義できます。例:
file '/conf.py' do
source ["#{node.chef_environment}.py", 'conf.py']
end
template '/test' do
source ["#{node.chef_environment}.erb", 'default.erb']
end
Mac OS Xでのパスワード
user Resourceに次のAttributeが追加されました。
Attribute | 解説 |
---|---|
iterations | パスワードにSALTED-SHA512-PBKDF2 Shadowハッシュを繰り返す回数を指定します。 |
salt | パスワードShadowハッシュのソルトを指定します。Mac OS Xバージョン10.7ではSALTED-SHA512で、バージョン10.8以上ではSALTED-SHA512-PBKDF2でパスワードShadowハッシュを計算します。 |
SALTED-SHA512パスワードの利用
Mac OS X 10.7ではSALTED-SHA512を用いてパスワードShadowハッシュを計算します。Shadowハッシュ値の長さは68バイトで、ソルト値は最初の4バイト、残りの64バイトがShadowハッシュ自身となります。次はMac OS X 10.7でパスワードShadowハッシュを計算するコードです。
password = "my_awesome_password"
salt = OpenSSL::Random.random_bytes(4)
encoded_password = OpenSSL::Digest::SHA512.hexdigest(salt + password)
shadow_hash = salt.unpack('H*').first + encoded_password
計算したパスワードShadowハッシュをuser Resourceで用います。
user "my_awesome_user" do
password "c9b3bd....d843" # 長さ: 136
end
SALTED-SHA512-PBKDF2パスワードの利用
Mac OS X 10.8以上ではSALTED-SHA512-PBKDF2を用いてパスワードShadowハッシュを計算します。Shadowハッシュ値の長さは128バイトで、ソルト値は32バイト、整数で繰り返しの長さを指定します。次はMac OS X 10.8以上でパスワードShadowハッシュを計算するコードです。
password = "my_awesome_password"
salt = OpenSSL::Random.random_bytes(32)
iterations = 25000 # 20000以上の値がお勧め。
shadow_hash = OpenSSL::PKCS5::pbkdf2_hmac(
password,
salt,
iterations,
128,
OpenSSL::Digest::SHA512.new
).unpack('H*').first
salt_value = salt.unpack('H*').first
計算したパスワードShadowハッシュをuser Resourceで用います。
user "my_awesome_user" do
password "cbd1a....fc843" # 長さ: 256
salt "bd1a....fc83" # 長さ: 64
iterations 25000
end
chef-clientオプション
chef-client実行ファイルの次のオプションが更新されました。
--chef-zero-port PORT
chef-zeroが待ち受けるポートです。個別あるいはコマンド内でポートレンジでポートを指定していない場合、chef-clientは8889から9999の間のポートをスキャンして、利用可能な最初のポートを選びます。ポートかポートレンジはclient.rbファイルのchef_zero.port設定を用いて指定します。
-o RUN_LIST_ITEM, --override-runlist RUN_LIST_ITEM
指定のアイテムで現在のrun listを置き換えます。このオプションはNodeにキャッシュされたCookbookや関連ファイルを削除しません。
client.rbファイルの次の設定が更新され、デフォルト値がtrueとなりました。
設定 | 解説 |
---|---|
disable_event_logger | Microsoft Windows「アプリケーション」イベントログへのイベント送信を有効化/無効化します。falseならば、chef-clientの実行の最初と最後に、またchef-clientが失敗した場合に、イベントをMicrosoft Windows「アプリケーション」イベントログに送信します。trueならば、イベントログの送信を無効化します。デフォルト値: true |
no_lazy_load | chef-client実行の始めに、すべてのCookbook FileとTemplateをダウンロードします。デフォルト値: true |
file_staging_uses_destdir | 一時ファイルを通してどのようにファイルを仮置きするか指定します。trueならば、ファイルを配置予定のディレクトリに一時ファイルを作成します。falseならば、一時ファイルをENV['TMP']以下に作成します。デフォルト値: true |
local_key_generation | Chef Serverとchef-clientのどちらが秘密/公開鍵ペアを作成するか指定します。trueならば、chef-clientが鍵ペアを生成し、公開鍵をChef Serverに送信します。デフォルト値: true |
検索結果のフィルタリング
検索クエリの一部として:filter_resultを指定すると、Chef Serverに対して指定したハッシュの形式でデータを返させることができます。
:filter_resultを使ったsearchメソッドの書式は次のようになります。
search(:index, "query",
:filter_result => { 'foo' => [ 'abc' ],
'bar' => [ '123' ],
'baz' => [ 'sea', 'power' ]
}
).each do |result|
puts result['foo']
puts result['bar']
puts result['baz']
end
- :indexはChef Serverで検索クエリとして実行されるインデックスの名前です。他に:client、:data_bag_name、:environment、:node、:roleが利用できます。
- "query"はChef Server上のオブジェクトに対する正当な検索クエリです。
- :filter_resultは返される値のハッシュを定義します。
- a) Chef::Provider基本クラスのインスタンスで b) chef-client由来のあらゆるコアResourceの存在であると検査されるべき。
- LWRPBaseを用いるように更新されるべき。
例:
search(:node, "role:web",
:filter_result => { 'name' => [ 'name' ],
'ip' => [ 'ipaddress' ],
'kernel_version' => [ 'kernel', 'version' ]
}
).each do |result|
puts result['name']
puts result['ip']
puts result['kernel_version']
end
knife search
knife searchサブコマンドに、検索結果をフィルタリングするオプションが追加されました。
-f FILTER, --filter-result FILTER
指定のFILTERにマッチしたAttributeのみを取得します。例: \"ServerName=name, Kernel=kernel.version\"
execute Resourceのpath Attribute
path Attributeは、chef-clientのどのバージョンのどのProviderにも実装されていませんでした。chef-client 12から、path Attributeは警告を返すようになります。chef-client 13でpathは廃止となり、例外になります。現在path Attributeを用いているCookbookは、代わりにenvironment Attributeを用いるように更新してください。例:
execute "mycommand" do
environment "PATH" => "/my/path/to/bin:#{ENV["PATH"]}"
end
Chef::Providerの独自Resource
独自Resource内にあるchef-client由来のコアResourceも用いるような、Cookbookの/librariesディレクトリに独自Resourceを作成する場合、独自Resourceに関連する基本クラスを更新しなければいけません。以前のchef-clientのバージョンでは、Recipe DSLがChef::Provider基本クラスに含まれていたため、Chef::Providerクラスのすべてが必要でした。
例えば、lvm Cookbookのdirectory Resourceとmount Resourceを用いているlvm_logical_volume独自Resourceは次のようになります。
class Chef
class Provider
class LvmLogicalVolume < Chef::Provider
include Chef::Mixin::ShellOut
...
if new_resource.mount_point
if new_resource.mount_point.is_a?(String)
mount_spec = { :location => new_resource.mount_point }
else
mount_spec = new_resource.mount_point
end
dir_resource = directory mount_spec[:location] do
mode 0755
owner 'root'
group 'root'
recursive true
action :nothing
not_if { Pathname.new(mount_spec[:location]).mountpoint? }
end
dir_resource.run_action(:create)
updates << dir_resource.updated?
mount_resource = mount mount_spec[:location] do
options mount_spec[:options]
dump mount_spec[:dump]
pass mount_spec[:pass]
device device_name
fstype fs_type
action :nothing
end
mount_resource.run_action(:mount)
mount_resource.run_action(:enable)
updates << mount_resource.updated?
end
new_resource.updated_by_last_action(updates.any?)
end
chef-client 12から、Recipe DSLはChef::Provider基本クラスから削除され、LWRPBaseを用いるだけで利用できるようになります。Cookbookの/librariesに独自Resourceを含むCookbookは、
例えば、前述の独自ResourceをLWRPBaseを用いるように更新すると次のようになります。
class Chef
class Provider
class LvmLogicalVolume < Chef::Provider::LWRPBase
include Chef::Mixin::ShellOut
...
if new_resource.mount_point
if new_resource.mount_point.is_a?(String)
mount_spec = { :location => new_resource.mount_point }
else
mount_spec = new_resource.mount_point
end
dir_resource = directory mount_spec[:location] do
mode 0755
owner 'root'
group 'root'
recursive true
action :nothing
not_if { Pathname.new(mount_spec[:location]).mountpoint? }
end
dir_resource.run_action(:create)
updates << dir_resource.updated?
mount_resource = mount mount_spec[:location] do
options mount_spec[:options]
dump mount_spec[:dump]
pass mount_spec[:pass]
device device_name
fstype fs_type
action :nothing
end
mount_resource.run_action(:mount)
mount_resource.run_action(:enable)
updates << mount_resource.updated?
end
new_resource.updated_by_last_action(updates.any?)
end
他に変更は必要ありません。
Attributeの動作の変更
chef-client 12での、指定の優先度のAttributeキーをどう削除するか、すべての優先度のAttributeキーをどう削除するか、指定の優先度の入れ子の値をどう上書きするか、ということを含むAttributeの重要な変更はRFC-23を見てください。加えて、node.default!はnode.force_defaultに、node.override!はnode.force_overrideになりました。
node.force_default
chef-clientの以前のバージョンでは、node.default!はnode.force_default!の別名でした。chef-client 12からは、node.force_defaultはアクセサからセッタに変更されます。node.default!を用いていたCookbookは正しいAttribute優先度を用いるように更新し、!を削除しなければいけません。例:
node.default![:foo] = 'bar'
これは次のように更新しなければいけません。
node.force_default[:foo] = 'bar'
node.force_override
chef-clientの以前のバージョンでは、node.override!はnode.force_overrideの別名でした。chef-client 12からは、node.force_overrideはアクセサからセッタに変更されます。node.override!を用いていたCookbookは正しいAttribute優先度を用いるように更新し、!を削除しなければいけません。例:
node.override![:foo] = 'bar'
これは次のように更新しなければいけません。
node.force_override[:foo] = 'bar'
SSL証明書
Chef Server 12は、knifeやchef-clientのような、Chef Serverに対して行われるすべての要求でデフォルトでSSL検証が有効になりました。この証明書は、Chef Serverのインストール中に生成されて自己署名されるので、chef-clientとともに配布されている信頼できる認証局(Certificate Authority; CA)によって署名されていないことを意味します。Chef Serverによって生成された証明書は、knifeやchef-clientのようなChef Serverに対して要求を行うあらゆるマシンにダウンロードしておかなければいけません。
例えば、SSL証明書をダウンロードせずに次のようにknifeコマンドを実行すると、
$ knife client list
次のようなエラーになります。
ERROR: SSL Validation failure connecting to host: chef-server.example.com ...
ERROR: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 ...
これは意図した動作で、要求を行うマシンに検証可能な証明書が追加されるまで起こります。
Chef Serverで生成されたSSL証明書をknifeやchef-clientがどのように用いるかの詳しい情報はSSL Certificatesを参照してください。