Windows OSの設定や構成変更を簡単に、そして確実に行うことができるPowerShell DSC(Desired State Configuration)。今回はプル型の展開方法について解説する。プル型では、展開先のノードが自分自身でDSCサーバーに構成情報を問い合わせて設定を行う。
前回は、PowerShell DSCで任意のConfigurationをノードに対して展開する方法として、プッシュ型の展開方法を紹介した。今回はプル型での展開方法を解説する。
本連載における、PowerShell DSCを使った「プッシュ型」と「プル型」の展開方法を図にすると次のようになる。
前回のプッシュ型の適用を通して、PowerShell DSCのConfigurationの書き方、.mofを使って構成を適用する流れはつかめただろう。続いて今回はプル型で構成を展開していく流れを説明する。
プル型の展開では、各ノードがDSCサーバーに問い合わせることで、ノードが自分自身の設定を行っていく。いつ設定を適用するか主導権を握っているのは各ノードであり、ノードはDSCサーバーに対して「あるべき構成」が変化してないかどうかを定期的に確認する。
プッシュ型ではDSCサーバーは追加の機能をインストールすることなく、プッシュノードに対して構成を適用できた。しかしプル型では、まずDSCサーバーに対して「PSDSCPullServer」と「PSDSCComplianceServer」の構成が必要だ。これは、IISを使ったoDataEndPointで、標準リソースに加えてxPSDesiredStateConfigurationリソースを用いることで構成できる。
早速、DSCサーバーをプルサーバーにする流れを見ていこう。
DSCサーバーをプルサーバーに構成するので、作業はまずプルサーバー上で行う。
プルサーバーにするために利用するxPSDesiredStateConfiguration は、Microsoft TechNetのScriptCenterで公開されている。記事執筆時点では、Ver.3.0.2.0が最新だ。
このサイトからZIPファイルをダウンロード・解凍して、プルサーバーのモジュールフォルダー「$env:ProgramFiles\WindowsPowerShell\Modules」に配置すれば準備完了だ。
このリソースを配置するモジュールパスは、リソースを参照するために指定されている。ユーザーモジュールフォルダー「$env:UserProfile\Documents\WindowsPowerShell\Modules」やシステムモジュールフォルダー「$env:SystemRoot\System32\WindowsPowerShell\v1.0\Modules」に配置してもリソースが読み込まれないため注意してほしい。
ところで、ここまでの手順(ZIPファイルをダウンロードして展開・配置する手順)は、シンプルにConfiguraionを書いてDSCで実行できる。せっかくなので、DSC自身でダウンロード・展開するようにしておこう。筆者は普段DSCでサーバーの構成を行っており、次のコードもその1つだ。
Configuration DownloadxPSDesiredStateConfiguration
{
param
(
[Parameter(Mandatory=1)]
[String[]]
$DownloadPath,
[Parameter(Mandatory=1)]
[String]
$OutFile,
[Parameter(Mandatory=1)]
[String]
$SourcePath,
[Parameter(Mandatory=0)]
[ValidateNotNullOrEmpty()]
[String]
$ModulePath = "$env:ProgramFiles\WindowsPowerShell\Modules"
)
Node "localhost"
{
File DownloadDirectory
{
DestinationPath = Split-Path $OutFile -Parent
Type = "Directory"
Ensure = "Present"
}
Script Download
{
SetScript = {(New-Object System.Net.WebClient).DownloadFile("$using:DownloadPath", "$using:OutFile")}
TestScript = {Test-Path "$using:OutFile"}
GetScript = {@{OutFile = "$using:OutFile"}}
}
Archive Unzip
{
Path = $OutFile
Destination = $SourcePath
}
File DSCResourceFolder
{
SourcePath = $SourcePath
DestinationPath = $ModulePath
Recurse = $true
Type = "Directory"
Ensure = "Present"
}
}
}
Configurationの各セクションを説明しておく。
このConfigurationは、特定のリソースに縛られないように書いているので、Configurationの実行時に渡す内容によって他のリソースも配置することが可能だ。
では、xPSDesiredStateConfigurationリソースを配置するように.mofを生成しよう。
$param = @{
DownloadPath = "http://gallery.technet.microsoft.com/xPSDesiredStateConfiguratio-417dc71d/file/124065/1/xPSDesiredStateConfiguration_3.0.2.0.zip"
OutFile = "C:\Tools\xPSDesiredStateConfiguration_3.0.zip"
SourcePath = "C:\Tools\xPSDesiredStateConfiguration"
OutPutPath = "c:\DownloadxPSDesiredStateConfiguration"
}
DownloadxPSDesiredStateConfiguration @param
利用するパラメーターは、先頭の$paramハッシュテーブル部分にまとめて記述して見やすくしている。それぞれの意味は次の通りである。
このスクリプトを使うに当たり、一つだけ注意点がある。上の例のDownloadPathでは特定バージョンのxPSDesiredStateConfigurationリソースを指定している。TechNet ScriptCenterでは最新バージョンのファイルのみアクセス可能で過去のファイルにはアクセスできない。DSCリソースは現在も頻繁にバージョンが更新されているため、TechNet ScriptCenterからダウンロードする場合は、指定したバージョンが存在するか確認が必要だ。もし任意のバージョンを利用したい場合は、GitHubなど任意のリポジトリから取得するような運用をするとよいだろう。
Configurationを実行して.mofファイルを生成した結果が次の画面だ。
Start-DSCConfigurationコマンドレットで、DSCサーバー自身にリソースを配置してみよう。
Start-DscConfiguration -Wait -Verbose -Path $param.OutPutPath
実行されている最中のDSCのVerboseメッセージは長いが、3〜4秒で完了するだろう。
DSCリソースが配置できたら、Get-DSCResouceコマンドレットでリソースを確認しよう。
Get-DscResource
実行結果を見ると、ModuleプロパティにxPSDesiredStateConfigurationと表示されたリソースが確認できるだろう。リソースの配置は以上で完了だ。
Copyright© Digital Advantage Corp. All Rights Reserved.