読者です 読者をやめる 読者になる 読者になる

素敵なおひげですね

PowerShellを中心に気分で書いているブログです。

PowerShell DSC for Linuxを試す

PowerShell Linux Windows

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

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

PowerShell DSC for Linuxとは

github.com

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

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

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

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

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

で確認できます。
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だといろいろつらかったのでWindowsPowerShellは5.0に上げています。

1. CentOSの初期設定

最初にCentOSPowerShell DSC for Linuxをインストールします。
OMI ServerとPowerShell DSC for Linuxrpmファイルを順に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-DscConfigurationCentOSに流し込んでやれば完了です。

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

実行結果

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

f:id:stknohg:20160916211109p:plain

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

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

f:id:stknohg:20160916211240p:plain

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

最後に

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

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

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

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

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