tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

PowerShell DSC Advent Calendar 2014 : Day 10 Push であるべき状態へ収束させる

これは、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日目まではここまでを追ってきました。

今日は、続きである↓の流れを見ることになります。

  1. あるべき状態を記述したMOFファイルをノードに送って実行
  2. 実行が完了

想定するあるべき状態

次のコードにある、サービスの起動でやります。

現在の状態です。

両方止まっています。

Status  Name     DisplayName   
------  ----     -----------   
Stopped W32Time  Windows Time  
Stopped wuauserv Windows Update

実行

  1. コンフィグレーションからMOFファイルの生成
  2. 対象ノードをあるべき状態に収束
コンフィグレーションから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

f:id:guitarrapc_tech:20141212100356p:plain

この時、つけたスイッチについて説明します。

  • -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(自動)になっていますね。

f:id:guitarrapc_tech:20141212045516p:plain

まとめ

あるべき状態に収束したのがわかると思います。

ただの PSRemoting と似た操作でできる。こういう、すでにある仕組みに載せるのって大事ですね。

11日目は パスワードの暗号化周りですね。はい。やりますよ。