[和訳] Chef Client 12.2.0 リリース #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Chef Client 12.2.0 Released (2015/03/26) の和訳です。
シェフのみなさん、こんにちは。
更新: 2015/03/28 00:28:04 UTC: Chef Client 12.2.0には、HOME環境変数が設定されていない状態でchef-clientを実行できないというレグレッションがあります。これはchef-clientをサービスとして動作させているユーザに影響があります。現在、再リリースできるよう作業中です。現時点でchef-clientをサービスとして動作させているなら、12.2.0に更新するより12.2.1を待つのがよいでしょう。
この問題はGitHubのhttps://github.com/chef/chef/issues/3153で確認できます。
Chef Client 12.2.0をリリースしました。このリリースは多くの新機能と同じくらいバグ修正を含んでいます…。お楽しみいただけると思います。変更のすべては変更履歴を確認してください。
何が新しいのか
ポリシーファイルとChef Server 12.0.7の互換性
Chef Server 12.0.7はNodeを収束するためのポリシーファイルの実装について最小限必要な機能を含んでいます。ポリシーファイルの「ネイティブモード」はChef Server 12.0.7のAPIで動作するように更新されています。ただし、Chef Server 12.0.7は既存のOrganizationを更新するために必要なコードを含んでいないので、Chef ServerでポリシーファイルAPIを有効にするためのオプトインの特別な設定をいくつか行う必要があります。この手順はChef Serverのリリースノートに記述する予定です。
Desired State Configuration (DSC) Resource
もしWindows Management Framework (WMF) 5を使っているなら、新しいdsc_resourceはとても都合がいいでしょう。この新機能によって、直接リソースを呼び出せるWMF 5のInvoke-DscResourceコマンドレットを利用できるようになります。
必要条件
この新しいResourceを使うには、WMF 5の2月のプレビュー版を使っている必要があります。これはPowershell Cookbookを使えばインストールできます。また、Local Configuration Manager (LCM)がRefreshModeをDisabledで設定されている必要があります。これをすることでdsc_scriptが使えなくなります。次がDSC設定例です。
# create a configuration command to generate a meta.mof to set
# Local Configuration Manager settings
Configuration LCMSettings {
Node localhost {
LocalConfigurationManager {
RefreshMode = 'Disabled'
}
}
}
# Run the configuration command and generate the meta.mof to configure
# a local configuration manager
LCMSettings
# Apply the local configuration manager settings found in the LCMSettings
# folder (by default configurations are generated to a folder in the current
# working directory named for the configuration command name
Set-DscLocalConfigurationManager -path ./LCMSettings
このスクリプトを実行すると、LCMはドキュメントマネジメントを行わなくなり、Chefがその役割を行えるようになります。運用途中で他の値に変更することもできますが、dsc_scriptとdsc_resourceの両方のResourceを使っているなら変更すべきではありません。
使い方
LCMを正しく設定したら、Recipe内でdsc_resourceが使えるようになります。Get-DscResourceコマンドを実行することで有効なリストが取得できます。Composite値であるImplementedAsプロパティを持っていないあらゆるリソースが利用できます。
例として、User DSCリソースを考えてみましょう。User DSCリソースが次のような状態になっているところから始めます。
> Get-DscResource User
ImplementedAs Name Module Properties
------------- ---- ------ ----------
PowerShell User PSDesiredStateConfiguration {UserName, DependsOn, Descr...
このようにImplementedAsがCompositeではないので、このリソースはdsc_resourceが使えます。Userリソースによって受け付けられるプロパティが何かは次で調べられます。
> Get-DscResource User -Syntax
User [string] #ResourceName
{
UserName = [string]
[ DependsOn = [string[]] ]
[ Description = [string] ]
[ Disabled = [bool] ]
[ Ensure = [string] { Absent | Present } ]
[ FullName = [string] ]
[ Password = [PSCredential] ]
[ PasswordChangeNotAllowed = [bool] ]
[ PasswordChangeRequired = [bool] ]
[ PasswordNeverExpires = [bool] ]
}
この通り、UserリソースはUserNameプロパティを必須としていますが、最低でもPasswordによって確認したいでしょう。またこの通り、UserNameプロパティは文字列型でなければならず、PasswordはPSCredential型である必要があります。PowershellのPSCredentialに割り当てできるRubyのネイティブな型は存在しないので、簡単のためにdslメソッドps_credentialを提供します。ps_credentialはps_credential(password)やps_credential(username, password)のように呼び出せます。内部では、Powershell PSCredentialにシリアライズするChef::Util::Powershell::PSCredentialを作成しています。
次の型変換をサポートしています。
Rubyの型 | Powershellの型 |
---|---|
Fixnum | Integer |
Float | Double |
FalseClass | $false |
TrueClass | $true |
Chef::Util::Powershell::PSCredential | PSCredential |
Hash | Hashtable |
Array | Object[] |
この情報をもとに、ユーザを作成するChef dsc_resource Resourceを構成してみましょう。
dsc_resource 'create foo user' do
resource :User
property :UserName, 'FooUser'
property :Password, ps_credential("P@ssword!")
property :Ensure, 'Present'
end
サードパーティリソース
dsc_resourceはサードパーティDSCリソース、例えばDSCリソースキットの利用もサポートしています。それらのリソースはUserのように、あらゆるPSDesiredStateConfigurationリソースのように使うことができます。dsc_resourceの実装は、Get-DscResourceコマンドレットを通して見えるDSCリソースとどのようにやりとりするかを知っているので、その通りに動作します。xSmbShareを使いたければ、次のようにpowershell Resourceを構築します。
dsc_resource 'create smb share' do
resource :xSmbShare
property :Name, 'Foo'
property :Path, 'C:\Foo'
end
これは次を実行しています。
> Get-DscResource xSmbShare
ImplementedAs Name Module Properties
------------- ---- ------ ----------
PowerShell xSmbShare xSmbShare {Name, Path, ChangeAccess, ...
これによってモジュール名を検索し、この場合ではxSmbShareを使います。しかし、この検索はプロセス全体の速度低下を招きます。複数のDSCリソースの名前でも可能です。そのような場合のために、dsc_resourceは追加Attributeのmodule_nameを提供しています。リソースの元となるモジュールの名前を渡すことで、dsc_resourceは使うモジュールを確定します。これはモジュール名の検索を飛ばすように動くので、Resourceの実行時間を短くできるでしょう。
注意点
- dsc_resourceの実装は実験的なInvoke-DscResourceコマンドレットに基いています。
入手するには
ダウンロードページを参照してください。
加えて、Windows以外のプラットフォームでは次のコマンドで最新のChef Clientをダウンロードできます。
curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -v 12.2.0
Windowsでは、次のリンクからこのバージョンをダウンロードできます: Chef Client 12.2.0
助けを得るには
このリリースで何か問題があれば、Githubのissueに登録するか、chefまたはchef-devメーリングリストに報告してください。