Go to main content
Oracle® Solaris 11.3 でのシステムサービスの開発

印刷ビューの終了

更新: 2016 年 11 月
 
 

Puppet ステンシルサービス

Puppet は、多くのシステムの構成を管理するためのツールキットです。Oracle Solaris では、Puppet アプリケーションは SMF で管理されます。

Puppet サービスの高度な概要

system/management/puppet パッケージをインストールすると、puppet:masterpuppet:agent の 2 つの SMF サービスインスタンスが得られます。これらのインスタンスはデフォルトで無効になっています。

これらのインスタンスを有効にしたあと、次のコマンドを実行すると、puppet:masterpuppet: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 構成ファイル

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 ステンシルファイル

ステンシルファイルのコンテンツは、構成ファイルに書き込まれるプロパティーとほかの情報を伝えます。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 構成ファイルの変更

初期 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 コマンドを使用します。