現在、私はWindowsサーバーサービスの起動モードを自動化しようとしています。私はpuppetlabsのレジストリを使用しようとしましたが、私は期待どおりにモジュールが動作していないことに気づいた。puppet functions exec windowsコマンドライン
基本的には、各サーバーで更新する必要のあるWindowsサービスの一覧がありますが、一部のサーバーではサービスが存在しない可能性がありますが、puppetlabsレジストリは期待された動作ではない場合にのみ新しいキーを作成します。右によって下に述べたように、それが動作するはずです:
-
マニフェスト/ hiera
- の内側に言及していない場合はとしてそれは、その後、スタートモードを更新しない場合は、サービスがサーバーやない
- であるかどうかを
- チェック存在し、ただ何もしないし、すぐに次のサービスに、私は知っていたから基づい
をスキップし、サービスキーが存在するかどうかをチェックしたりしないようにする唯一の方法は、カスタム関数を使用しているようです。だから私はすでにいくつかのWin32APIがサポートされていないなどのエラーを取得することによって成功しなかったwin32/registryを使用してカスタム関数を書こうとしました。私が考えることができる別の方法は、regコマンドラインを使用してキーが存在するかどうかを確認することです。これは人形コード関数です:
module Puppet::Parser::Functions
newfunction(:check_winservice_exist, :type => :rvalue) do |args|
service_name = args[0]
unless args.length > 0 then
raise Puppet::ParseError, ("check_winservice_exist(): wrong number of arguments (#{args.length}; must be > 0)")
end
command = "reg query HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\#{service_name} /f DisplayName"
result = system command
return result
#if result == true
# return result
#else
# return result
#end
end
end
私はコマンドラインで単純化されたルビースクリプトを実行すると、それは動作し、期待値を返します。しかし、私は人形のカスタム関数として上記のスクリプトを使用すると、それは常に空に戻ります。
これは初めての人形のカスタム関数を記述するので、私はここで何が間違っていたのか分かりません。問題を解決するために私が使用できる別の方法があるかどうかアドバイスするか、関数のスクリプトで何が間違っているのかを助言してください。
をサービス名は、アレイ内にあるかどうかをチェックするかを追加することによってだけで動作します:彼らは、マスター上で実行されます。代わりにカスタムファクトを実行する必要があります。 –
フィードバックいただきありがとうございます。カスタムファクトを使用する以外の方法がありますか?私はセキュリティ強化のために何百ものサービスをチェックしており、カスタムファクトでそのサービスのリストを作成するのはちょっと面倒です。 – AlamHo
配列内のすべてのサービスを収集するファクトを作成するだけです。それは簡単だろう。 –