これは、PowerShell DSC Advent Calendar 2014 - Adventar 10日目の記事です。
ん?時差が?気のせいです。
今日は対象ノードをあるべき状態に収束させる方法として PUSHモードを使います。
目次
PUSH振り返り
PUSH と PULL それぞれのシナリオの違いは、DSCサーバーとノードのどちらがトリガーを引くかです。
今回は DSC サーバーがトリガーなので PUSH ですね。
PUSH が何か忘れた人は4日目の記事をどうぞ
ちょっとだけ振り返り
あるべき状態をコードにする Config as Code では、コンフィグレーションがあるべき状態でしたね?
コンフィグレーションは PowerShell で DSC を叩くための糖衣構文を利用したもので、実行によってMOFファイルがコンパイル、生成されました。
実際に対象ノードが CIM経由で自身を構成する時に使うのが MOFファイルで.... 9日目まではここまでを追ってきました。
今日は、続きである↓の流れを見ることになります。
- あるべき状態を記述したMOFファイルをノードに送って実行
- 実行が完了
想定するあるべき状態
次のコードにある、サービスの起動でやります。
現在の状態です。
両方止まっています。
Status Name DisplayName ------ ---- ----------- Stopped W32Time Windows Time Stopped wuauserv Windows Update
実行
- コンフィグレーションからMOFファイルの生成
- 対象ノードをあるべき状態に収束
コンフィグレーションからMOFファイルの生成
実行前にコンフィグレーションを実行して MOFファイルを生成します。
7日目にMOFの生成でやりましたね
さらに、8日目にやった通り ロールを指定してノードに合わせた実行を行います。
同様にやります。
実行結果です。
Directory: D:\Service Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2014/12/12 4:41 1870 127.0.0.1.mof
MOFファイルも生成できました。
対象ノードをあるべき状態に収束
生成したMOFファイルのフォルダを指定して対象ノードに実行します。
実行結果です。 うまく適用できていますね。
Directory: D:\Service Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2014/12/12 4:46 1870 127.0.0.1.mof VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'. VERBOSE: An LCM method call arrived from computer WINDOWS81X64 with user sid S-1-5-21-386 7976201-3469415403-658829222-1001. VERBOSE: [WINDOWS81X64]: LCM: [ Start Set ] VERBOSE: [WINDOWS81X64]: LCM: [ Start Resource ] [[Service]w32time] VERBOSE: [WINDOWS81X64]: LCM: [ Start Test ] [[Service]w32time] VERBOSE: [WINDOWS81X64]: [[Service]w32time] サービス 'w32time' の開始 の種類は 'Manual' です。'Automatic' と一致しません。 VERBOSE: [WINDOWS81X64]: LCM: [ End Test ] [[Service]w32time] in 0.3330 seconds . VERBOSE: [WINDOWS81X64]: LCM: [ Start Set ] [[Service]w32time] VERBOSE: [WINDOWS81X64]: [[Service]w32time] サービス 'w32time' が開始 されました。 VERBOSE: [WINDOWS81X64]: LCM: [ End Set ] [[Service]w32time] in 0.1430 seconds . VERBOSE: [WINDOWS81X64]: LCM: [ End Resource ] [[Service]w32time] VERBOSE: [WINDOWS81X64]: LCM: [ Start Resource ] [[Service]wuauserv] VERBOSE: [WINDOWS81X64]: LCM: [ Start Test ] [[Service]wuauserv] VERBOSE: [WINDOWS81X64]: [[Service]wuauserv] サービス 'wuauserv' の 開始の種類は 'Manual' です。'Automatic' と一致しません。 VERBOSE: [WINDOWS81X64]: LCM: [ End Test ] [[Service]wuauserv] in 0.0110 second s. VERBOSE: [WINDOWS81X64]: LCM: [ Start Set ] [[Service]wuauserv] VERBOSE: [WINDOWS81X64]: [[Service]wuauserv] サービス 'wuauserv' が 開始されました。 VERBOSE: [WINDOWS81X64]: LCM: [ End Set ] [[Service]wuauserv] in 0.2970 second s. VERBOSE: [WINDOWS81X64]: LCM: [ End Resource ] [[Service]wuauserv] VERBOSE: [WINDOWS81X64]: LCM: [ End Set ] in 1.3500 seconds. VERBOSE: Operation 'Invoke CimMethod' complete. VERBOSE: Time taken for configuration job to complete is 1.461 seconds
この時、つけたスイッチについて説明します。
-Wait
を付けることでStart-DSCConfiguraion
が完了するのを待ちます。外すとJobとしてバックグラウンドで実行されます-Verbose
をつけることで、リソースが Test -> Set される動きが見えます。あとはリソース内部でWrite-Verbose
しているメッセージも見えます-Path
に、MOFファイルを生成したフォルダを指定します。MOFファイルのフルパスじゃないので気を付けましょう
実行を確認する時に多く使うでしょうから、Start-DSCConfiguraion -Wait -Verbose -Path MOFフォルダパス
が定番でしょう。あとは、必要に応じて -Force
や、-CimSession
、あるいは -Credential
を使ってリモートホストへの認証を対応するだけです。
実行結果
実行結果を見てみましょう。
Status Name DisplayName ------ ---- ----------- Running W32Time Windows Time Running wuauserv Windows Update
Running になっていますね。元が Stopped だったので、起動が確認できます。
さらに、あるべき状態として、元がManual
(手動)のスターとアップだったのもAutomatic
(自動)になっていますね。
まとめ
あるべき状態に収束したのがわかると思います。
ただの PSRemoting と似た操作でできる。こういう、すでにある仕組みに載せるのって大事ですね。
11日目は パスワードの暗号化周りですね。はい。やりますよ。