fbpx

CL LAB

HOME > CL LAB > Chef > [和訳] リリースノート: chef-client 12.0.x (2014/12/17) #opschef_ja #getchef_ja

[和訳] リリースノート: chef-client 12.0.x (2014/12/17) #opschef_ja #getchef_ja

 ★ 19

この記事は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_urlsource_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はスレッドを作成できません。システムプロセス上限を増やすには次のようにします。

  1. システムプロセスの上限が増やされていないことを確認します。
  2. 増やされていなければ、次のコマンドをrootユーザで実行します。

    $ chsec -f /etc/security/limits -s default -a "rss=-1"

    $ chsec -f /etc/security/limits -s default -a "nofiles=50000"

  3. システムプロセスの上限の更新を適用するため、論理パーティション(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を示すことを覚えておいてください。

  1. 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 Files

    F1=Help F2=Refresh F3=Cancel F8=Image
    F9=Shell F10=Exit Enter=Do

  2. 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

  3. カーソルをCULTURAL convention to installLANGUAGE translation to installの最初の2つのエントリに合わせて、UTF-8 English (United States) [EN_US]が選択されるまでF4でリストを移動します。EN_USは大文字です!
  4. 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 "https://github.com/opscode-cookbooks/chef-client/issues"
source_url CookbookのソースコードのURLです。この設定はChef Supermarketでも用いられます。

source_url "https://github.com/opscode-cookbooks/chef-client"

警告

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つの要素に依存しています。パターンは次のようになります。

  1. /host-$fqdn/$source
  2. /$platform-$platform_version/$source
  3. /$platform/$source
  4. /default/$source
  5. /$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は返される値のハッシュを定義します。
  • 例:

    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 Cookbookdirectory 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は、

    • a) Chef::Provider基本クラスのインスタンスで b) chef-client由来のあらゆるコアResourceの存在であると検査されるべき。
    • LWRPBaseを用いるように更新されるべき。

    例えば、前述の独自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を参照してください。

    Changelog

    https://github.com/opscode/chef/blob/12-stable/CHANGELOG.md

CL LAB Mail Magazine

CL LABの情報を逃さずチェックしよう!

メールアドレスを登録すると記事が投稿されるとメールで通知します。

メールアドレス: 登録

※登録後メールに記載しているリンクをクリックして認証してください。

Related post