tech.guitarrapc.cóm

Technical updates

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

これは、アドベントカレンダー10日目の記事です。

https://www.adventar.org/calendars/579

今日は対象ノードをあるべき状態に収束させる方法としてPUSHモードを使います。

PUSH振り返り

PUSHとPULLそれぞれのシナリオの違いは、DSCサーバーとノードのどちらがトリガーを引くかです。

今回はDSCサーバーがトリガーなのでPUSHですね。

PUSHが何か忘れた人は4日目の記事をどうぞ

https://tech.guitarrapc.com/entry/2014/12/04/023338

ちょっとだけ振り返り

あるべき状態をコードにする Config as Code では、コンフィグレーションがあるべき状態でしたね?

コンフィグレーションはPowerShellでDSCを叩くための糖衣構文を利用したもので、実行によってMOFファイルがコンパイル、生成されました。

実際に対象ノードがCIM経由で自身を構成する時に使うのがMOFファイルで.... 9日目まではここまでを追ってきました。

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

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

想定するあるべき状態

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

https://gist.github.com/a55f2ef33c97d145495f

現在の状態です。

https://gist.github.com/c7b6cbe35e3bab64580d

両方止まっています。

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

実行

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

コンフィグレーションからMOFファイルの生成

実行前にコンフィグレーションを実行してMOFファイルを生成します。

7日目にMOFの生成でやりましたね

https://tech.guitarrapc.com/entry/2014/12/07/230000

さらに、8日目にやった通りロールを指定してノードに合わせた実行を行います。

https://tech.guitarrapc.com/entry/2014/12/08/023134

同様にやります。

https://gist.github.com/b90001ea3d7249712a3e

実行結果です。

    Directory: D:\Service


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2014/12/12      4:41           1870 127.0.0.1.mof

MOFファイルも生成できました。

https://gist.github.com/guitarrapc/a3f227dba26478593fbb

対象ノードをあるべき状態に収束

生成したMOFファイルのフォルダを指定して対象ノードに実行します。

https://gist.github.com/guitarrapc/6b4113fce0631489baa2

実行結果です。 うまく適用できていますね。

    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

image

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

  • -Waitを付けることで-Waitが完了するのを待ちます。外すとJobとしてバックグラウンドで実行されます
  • -Verboseをつけることで、リソースがTest -> Setされる動きが見えます。あとはリソース内部で-Verboseしているメッセージも見えます
  • -Pathに、MOFファイルを生成したフォルダを指定します。MOFファイルのフルパスじゃないので気を付けましょう

実行を確認する時に多く使うでしょうから、Start-DSCConfiguraion -Wait -Verbose -Path MOFフォルダパスが定番でしょう。あとは、必要に応じてStart-DSCConfiguraion -Wait -Verbose -Path MOFフォルダパスや、Start-DSCConfiguraion -Wait -Verbose -Path MOFフォルダパス、あるいはStart-DSCConfiguraion -Wait -Verbose -Path MOFフォルダパスを使ってリモートホストへの認証を対応するだけです。

実行結果

実行結果を見てみましょう。

https://gist.github.com/c7b6cbe35e3bab64580d

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

Runningになっていますね。元がStoppedだったので、起動が確認できます。

さらに、あるべき状態として、元がManual(手動)のスターとアップだったのもManual(自動)になっていますね。

image

まとめ

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

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

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