Puppet は、多くのシステムの構成を管理するためのツールキットです。Oracle Solaris では、Puppet アプリケーションは SMF で管理されます。
system/management/puppet パッケージをインストールすると、puppet:master と puppet:agent の 2 つの SMF サービスインスタンスが得られます。これらのインスタンスはデフォルトで無効になっています。
これらのインスタンスを有効にしたあと、次のコマンドを実行すると、puppet:master と puppet:agent の両方が契約サービスであることが示されます。
$ svcs -p puppet STATE STIME FMRI online 17:19:32 svc:/application/puppet:agent 17:19:32 2565 puppet online 17:19:32 svc:/application/puppet:master 17:19:32 2567 puppet
次のコマンドは、契約サービスによって開始されたプロセスに関する少し詳しい情報を示します。
$ ps -o pid,args -p 2565,2567 PID COMMAND 2565 /usr/ruby/1.9/bin/ruby /usr/sbin/puppet agent --logdest /var/log/puppet/puppet- 2567 /usr/ruby/1.9/bin/ruby /usr/sbin/puppet master --logdest /var/log/puppet/puppet
ps 出力からわかるように、puppet は /var/log/puppet 内のログファイルに書き込みます。
$ ls /var/log/puppet puppet-agent.log puppet-master.log
Puppet では、/etc/puppet/puppet.conf という名前の構成ファイルを使用すると想定しています。/usr/sbin/puppet アプリケーションは、application/puppet サービスインスタンスに設定されたプロパティーからではなく、/etc/puppet/puppet.conf から構成情報を読み取ります。必要な構成ファイルを提供するために、それぞれの puppet インスタンスは、ステンシルファイルと configfile プロパティーグループを提供します。configfile プロパティーグループは、svcio ユーティリティーに対して実行し、指定された構成ファイルを作成するように指示します。ステンシルファイルは、正しい形式でサービスプロパティー値のデータを構成ファイルに書き込むために使用されます。
次のコマンドは、タイプ configfile のプロパティーグループにある、すべての puppet サービスプロパティーを示します。この出力は、puppet サービスの両方のインスタンスが、同じ値の同じ configfile プロパティーを持っていることを示します。各 puppet サービスインスタンスは、構成ファイルへのパス、構成ファイルのモード、およびステンシルファイルへのパスを提供します。
$ svcprop -g configfile puppet svc:/application/puppet:master/:properties/puppet_stencil/mode astring 0444 svc:/application/puppet:master/:properties/puppet_stencil/path astring /etc/puppet/puppet.conf svc:/application/puppet:master/:properties/puppet_stencil/stencil astring puppet.stencil svc:/application/puppet:agent/:properties/puppet_stencil/mode astring 0444 svc:/application/puppet:agent/:properties/puppet_stencil/path astring /etc/puppet/puppet.conf svc:/application/puppet:agent/:properties/puppet_stencil/stencil astring puppet.stencil
次のコマンドは、これらのインスタンスプロパティーが親サービスから継承されていることを確認します。
$ svccfg -s puppet listprop -l all puppet_stencil puppet_stencil configfile manifest puppet_stencil/mode astring manifest 0444 puppet_stencil/path astring manifest /etc/puppet/puppet.conf puppet_stencil/stencil astring manifest puppet.stencil $ svccfg -s puppet:agent listprop -l all puppet_stencil $ svccfg -s puppet:master listprop -l all puppet_stencil
インフラストラクチャーの場合、たとえば puppet:agent1 および puppet:agent2 インスタンスが必要になることがあります。その場合、Puppet 構成ファイルの変更に示すように、プロパティー値をカスタマイズし、インスタンスごとにプロパティーを追加します。
次に、構成ファイル /etc/puppet/puppet.conf の初期コンテンツを示します。
# WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details.
ステンシルファイルのコンテンツは、構成ファイルに書き込まれるプロパティーとほかの情報を伝えます。puppet_stencil/stencil プロパティーの値である puppet.stencil パスは、/lib/svc/stencils に対する相対パスです。次に、ステンシルファイル /lib/svc/stencils/puppet.stencil のコンテンツを示します。
# WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details. ; walk each instance and extract all properties from the config PG $%/(svc:/$%s:(.*)/:properties)/ { $%{$%1/general/enabled:? [$%2] $%/$%1/config/(.*)/ { $%3 = $%{$%1/config/$%3} } } }
ステンシルファイルでは、svc:/$%s:(.*)/:properties (または %1) は、svc:/application/puppet:agent/:properties および svc:/application/puppet:master/:properties に展開します。ここで .* (または %2) はすべてのインスタンスに一致します。インスタンス名は続いて、構成ファイルのブロックにラベルを付けるために使用されます。.* (または %3) の次のオカレンスは、%1 サービスインスタンスの config プロパティーグループ内のすべてのプロパティーに一致します。ステンシルは、svcio に対して、サービスインスタンスからのプロパティー名とそのプロパティーの値を構成ファイルに書き込むように指示します。
初期 Puppet 構成ファイルに記しているように、最初はリテラルコメント行だけが構成ファイルに書き込まれます。ステンシルファイルの general/enabled プロパティーの値のテストにより、構成ファイルへのプロパティー値の書き込みが防止されます。次のコマンドは、general/enabled プロパティーの値がデフォルトでは false であることを示します。
$ svcprop -p general/enabled puppet svc:/application/puppet:master/:properties/general/enabled boolean false svc:/application/puppet:agent/:properties/general/enabled boolean false
svcadm enable コマンドを使用してインスタンスを有効にしても、general/enabled プロパティーの値は変更しません。general/enabled プロパティーの値を true に変更しインスタンスを再起動すると、そのインスタンスの config プロパティーグループのすべてのプロパティーが構成ファイルに書き込まれます。
$ svccfg -s puppet:agent setprop general/enabled=true $ svcprop -p general/enabled puppet:agent false $ svcadm refresh puppet:agent $ svcprop -p general/enabled puppet:agent true $ svcadm restart puppet:agent
次のコマンドは、最初、config プロパティーグループの唯一のプロパティーが各インスタンスのログファイルへのパスであることを示します。
$ svcprop -p config puppet svc:/application/puppet:master/:properties/config/logdest astring /var/log/puppet/puppet-master.log svc:/application/puppet:agent/:properties/config/logdest astring /var/log/puppet/puppet-agent.log
有効になったインスタンスの config プロパティーが、インスタンス名でラベルが付けられたブロック内の構成ファイルに追加されました。
# WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details. [agent] logdest = /var/log/puppet/puppet-agent.log
Puppet 構成ドキュメントでは、構成ファイルには [main]、[agent]、および [master] のブロックが存在する可能性があると記されています。[main] ブロック内の構成は、エージェントおよびマスターの両方に適用されます。Puppet エージェントの場合、[agent] ブロック内の構成が [main] ブロック内の同じ構成をオーバーライドします。Puppet マスターの場合、[master] ブロック内の構成が [main] ブロック内の同じ構成をオーバーライドします。エージェントとマスターに共通した構成に [main] ブロックを使用する場合は、puppet:main インスタンスとそのインスタンスに対して適切な config プロパティーを作成します。
次のコマンドは、Puppet 構成ファイルに構成を追加する方法を示します。
$ svccfg -s puppet:agent svc:/application/puppet:agent> setprop config/report=true svc:/application/puppet:agent> setprop config/pluginsync=true svc:/application/puppet:agent> refresh svc:/application/puppet:agent> exit $ svcadm restart puppet:agent $ cat /etc/puppet/puppet.conf # WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details. [agent] logdest = /var/log/puppet/puppet-agent.log pluginsync = true report = true
プロパティーの削除やプロパティー値の変更にも、同様のコマンドを使用できます。Oracle Solaris 11.3 でのシステムサービスの管理 の 第 4 章, サービスの構成を参照してください。main インスタンスを追加するには、Oracle Solaris 11.3 でのシステムサービスの管理 の サービスインスタンスの追加に示されているように svccfg add コマンドを使用します。