しばたテックブログ

気分で書いている技術ブログです。

PowerShell DSC for Linuxを試す

そろそろ試しておかないといけないかなと思ったので。

正直PowerShell DSCはまだまだ勉強不足なのでおかしなところがあるかもしれませんがそこはご容赦ください。

PowerShell DSC for Linuxとは

github.com

名前の通りLinuxでPowerShell Desired State Configuration(DSC)を利用するための基盤です。
利用可能なOSは以下。

  • CentOS 5, 6, and 7 (x86/x64)
  • Debian GNU/Linux 6, 7 and 8 (x86/x64)
  • Oracle Linux 5, 6 and 7 (x86/x64)
  • Red Hat Enterprise Linux Server 5, 6 and 7 (x86/x64)
  • SUSE Linux Enterprise Server 10, 11 and 12 (x86/x64)
  • Ubuntu Server 12.04 LTS, 14.04 LTS, 16.04 LTS (x86/x64)

こいつ自体は、去年、PowerShell on Linuxが公開される以前から利用可能になっています。

下回りにOMIを使い、LCMや各DSC ResourceはOMI Providerとして提供されています。
そしてDSCの管理にはPythonスクリプトを使用します。
PowerShell on Linuxが出たことでPowerShellによる管理に切り替わっていくかどうかはまだよくわかりません。

組み込み済みのDSC Resourceの一覧は

Linux 用 Desired State Configuration の組み込みリソース | Microsoft Docs

で確認できます。
Linux用のリソース名はnxで始まる規約となっています。

PowerShell DSC for Linuxを試す

それでは早速試していきます。

検証環境

検証環境は

stknohg.hatenablog.jp

の時と同じにして、Windows Server 2012 R2からCentOS 7.2に対してPushでPowerShell Remoting over SSHの環境を構築するというのをやってみました。
この内容にした理由は、単純すぎるConfigurationだと面白くないのと、あと個人的に便利かなと思ったからです。

ただしPowerShell 4.0のDSCだといろいろつらかったのでWindowsのPowerShellは5.0に上げています。

1. CentOSの初期設定

最初にCentOSにPowerShell DSC for Linuxをインストールします。
OMI ServerとPowerShell DSC for Linuxのrpmファイルを順にyum installするだけでOKです。

これだけでCentOS側の準備は完了です。
(いちおう補足しておくと、予めglibcopensslpythonpython-ctypeslibcurlのパッケージが必要*1となりますのでインストールされていない場合はインストールしておいてください。)

2. Windowsの初期設定

以降はWindows側の作業になります。
Configurationを実行可能にするためにLinux向けDSC ResourceのMOFモジュール(nx)をインストールします。

-ScopeはとりあえずCurrentUserにしていますが必要に応じて変えて構いません。

3. Configurationの作成

続けてPowerShell Remoting over SSHの環境構築のためのConfigurationを書きます。
ざっと以下の様な感じになります。

おおまかな流れとしては、

  1. nxPackageリソースでPowerShell on Linuxのインストール
  2. nxPackagenxServiceリソースでSSHdのインストール+設定*2
  3. nxFileLineリソースで/etc/ssh/sshd_configにSubSystemの記述を追加
  4. nxScriptリソースでSSHdをRestart

となっています。

内容としては割とシンプルなものですが、1.に関してなぜかYumでFilePathを指定した場合に依存パッケージのインストールに失敗するため依存パッケージを個別にインストールする様にしています。
また、4.に関してはnxServiceリソースでサービスのReloadやRestartができないためnxScriptリソースで無理やりRestartさせています。
もっとスマートにできる方法があるとうれしいのですが...

4. Push実行

先のConfigurationを実行するとC:\temp[対象ノード名(centos.local)].mofが作成されます。
これをStart-DscConfigurationでCentOSに流し込んでやれば完了です。

OMIはTCP 5986番ポート(HTTPS)で待ち受けをしますのでNew-CimSessionOptionで接続オプションの指定を行っています。

実行結果

Start-DscConfigurationした結果はこんな感じになります。

f:id:stknohg:20160916211109p:plain

-Verbose指定しているのですがあまり詳細ログが出てくれません...
CentOS側の/var/opt/omi/log/dsc.logにより詳細なログが出るので、エラーが出た場合はこちらを見ると良いでしょう。

この後PowerShell Remoting over SSHでCentOSに接続できる様になり、その結果は以下の様な感じとなります。*3

f:id:stknohg:20160916211240p:plain

きちんと構成されています。

最後に

とりあえずこんな感じです。

公式な情報としてはMSDNに Linux 用 Desired State Configuration (DSC) の概要 | Microsoft Docs があります。
こちらも参考になりますのでぜひご覧ください。

*1:https://github.com/Microsoft/PowerShell-DSC-for-Linux#requirements 参照

*2:大抵の場合初期状態でSSHdはインストール済みでしょうが念のための記述です

*3:Windows側のSSH設定などは本エントリでは端折っています